[Ocaml] Как не расстраиваться из-за отсутствия перегрузки?
Ну для многих функций подходит тип 'a
open ExtString
module A = struct
let (++) a b = DynArray.add a b
end
module S = struct
let (++) a b = a ^ String.of_char b
end
let arr = DynArray.create ;;
let str = "abc";;
open A;;
arr ++ 1;;
arr ++ 2;;
DynArray.iter (Printf.printf "%d ") arr;;
open S;;
let s1 = str ++ 'd' in
let s2 = s1 ++ 'e' in
print_endline s2;;
Выводит "1 2 abcde".
open A;;
open S;;
arr ++ 1;;
arr ++ 2;;
DynArray.iter (Printf.printf "%d ") arr;;
let s1 = str ++ 'd' in
let s2 = s1 ++ 'e' in
print_endline s2;;
Можно заюзать расширение, позволяющее писать open A in arr ++ 1, т.е. открывать модуль локально, для выбранной части кода.
Оставить комментарий
agaaaa
Как-то не привычно после C++/C# каждый новый оператор называть по-новому. Да и для функций придумать простые имена нетривиально, когда у разных типов есть схожие операции.