0

不知道为什么需要所有这些运算符。理由是什么?为什么常规的 OCaml 对象语法不够用?

obj##.m
obj##.m := e
obj##m

此处的文档:http: //ocsigen.org/js_of_ocaml/3.6.0/manual/ppx

4

1 回答 1

1

OCaml 对象没有属性。如果你写,你就是在 objectobj#m上调用方法。如果您编写,您将再次调用object 上的方法,它返回一个 type 的值,然后将其传递给 operator 。mobjobj#m := emobj'e ref(:=)

因此,运算符,分别##.是调用的语法糖。(类似地,是 . 的语法糖。)Js.Unsafe.getJs.Unsafe.setobj##m x yJs.Unsafe.meth_call obj "m" [|x; y|]

JSOO 不是深入修改 OCaml 编译器以实际将 Javascript 对象映射到 OCaml 对象并正确识别 getter/setter,而是一个薄层,它仅在键入 Javascript 对象时依赖 OCaml 对象,而在执行时完全忽略它们。

于 2020-05-25T06:38:36.853 回答