包装融合 getter-setter 函数
Wrapping fused getter-setter functions
我在使用 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
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 "Method name and underscore"
我在使用 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
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 "Method name and underscore"