0

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
4

1 に答える 1

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ください。
  • forceforce_setの両方にバインドしforceます。http://ocsigen.org/js_of_ocaml/2.8.1/manual/library「メソッド名とアンダースコア」をご覧ください
于 2016-07-30T11:47:16.423 に答える