2016-07-29 3 views
0

У меня возникли проблемы с завершением подмножества d3-force с использованием jooc. Библиотека не использует свойства объекта и вместо этого реализует функции плавного усечения геттера, например.Обтекание плавких функций приемника-убирателя

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 «Название метода и символ подчеркивания»
+0

Lovely, большое спасибо! –