包装融合的getter-setter功能

时间:2016-07-29 20:18:30

标签: d3.js js-of-ocaml

我在使用jooc包装d3-force的子集时遇到问题。该库不使用对象属性,而是实现融合的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 个答案:

答案 0 :(得分: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