Обертывание слитых функций геттер-сеттер
У меня проблемы с упаковкой подмножества d3-force с помощью jooc. Библиотека не использует свойства объекта и вместо этого реализует слитые функции getter-setter, например
simulation.force("x", d3.forceX()) // setter
simulation.force("x") // getter
Я хотел бы найти способ эмулировать тот же тип полиморфизма в OCaml. Вот что у меня сейчас
module Force = struct
class type force = object
(* not important *)
end
let x (): force Js.t = Js.Unsafe.meth_call __d3 "forceX" [||]
class type simulation = object
method force : string -> #force Js.t -> unit Js.meth
end
let simulation nodes: simulation Js.t =
Js.Unsafe.(meth_call __d3 "forceSimulation" [|inject nodes|])
end
И вот что я после
let s = Force.simulation nodes in begin
s##force "x" (Force.x ())
s##force "x" (* wishful thinking *)
end
1 ответ
Решение
class type simulation = object
method force_set : Js.js_string Js.t -> #force Js.t -> unit Js.meth
method force : Js.js_string Js.t -> #force Js.t Js.meth
end
- Строки JavaScript не совместимы с ocaml. использование
Js.js_string Js.t
, force
а такжеforce_set
оба будут связываться сforce
, Посмотрите на http://ocsigen.org/js_of_ocaml/2.8.1/manual/library "Название метода и подчеркивание"