Соглашение об именовании функций в Ocaml - PullRequest
2 голосов
/ 27 ноября 2011

Поскольку Ocaml не принимает перегрузку функций, иногда мне приходится определять некоторые похожие функции для разных типов. Например,

let reduce_a (a: A): A = ...
let reduce_b (b: B): B = ...

let a_compare (a0: A) (a1: A): bool = ...
let b_compare (b0: B) (b1: B): bool = ...

Я знаю, что лучше всего иметь два модуля A и B и сделать 2 функции A.reduce и B.reduce. Но прежде чем создавать модули, я просто хотел бы узнать, как лучше всего назвать функцию.

Люди обычно предпочитают называть reduce_a (глагол перед глаголом) или a_reduce (тип перед глаголом)? Можем ли мы найти примеры в стандартных библиотеках?

Ответы [ 2 ]

6 голосов
/ 27 ноября 2011

Другая альтернатива - поместить их в свои собственные модули, например

module A = struct

    type t = ...
    let reduce x = ...
    let compare x y = ...

end

module B = struct ... (* you get the point *) end

. Таким образом, вам не нужно беспокоиться о том, является ли функция compare_a или a_compare, поскольку она имеетбыть A.compare.Вы должны будете воздерживаться от (кроме локального) открытия модулей.Конечно, работоспособность этого решения зависит от типов, с которыми вы имеете дело.

1 голос
/ 29 ноября 2011

Я обнаружил, что формат a_compare используется гораздо чаще, чем compare_a, включая сам компилятор OCaml, так что вы можете также использовать это соглашение. Нет никаких реальных преимуществ, кроме, возможно, косметического выравнивания, и факта, что это "чувствует" как пространство имен.

Обратите внимание, что это гораздо чаще используется для меток в типах записей и конструкторов в типах вариантов, чем для функций.

...