Обертывание слитых функций геттер-сеттер

У меня проблемы с упаковкой подмножества 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 "Название метода и подчеркивание"
Другие вопросы по тегам