不知道为什么需要所有这些运算符。理由是什么?为什么常规的 OCaml 对象语法不够?
obj##.m
obj##.m := e
obj##m
此处的文档:http://ocsigen.org/js_of_ocaml/3.6.0/manual/ppx
OCaml 对象没有属性。如果编写obj#m
,则在对象obj
上调用方法m
。如果你写obj#m := e
,你再次在对象obj
上调用方法m
,它返回一个类型为'e ref
的值,然后将其传递给运算符(:=)
。
因此运算符##.
,它只是用于调用Js.Unsafe.get
的语法糖,分别Js.Unsafe.set
。(同样,obj##m x y
是Js.Unsafe.meth_call obj "m" [|x; y|]
的句法糖。
JSOO不是深入修改OCaml编译器以实际将Javascript对象映射到OCaml对象并正确识别getter/setter,而是依赖于OCaml对象来键入Javascript对象并完全忽略它们以执行的薄层。