为什么是##。 js_of_ocaml 中需要运算符?
Why is the ##. operator needed in js_of_ocaml?
不确定为什么需要所有这些运算符。这是什么道理?为什么常规的 OCaml 对象语法不够用?
obj##.m
obj##.m := e
obj##m
OCaml 对象没有属性。如果你写 obj#m
,你是在对象 obj
上调用方法 m
。如果你写 obj#m := e
,你再次调用对象 obj
上的方法 m
并且它 returns 类型 'e ref
的值,然后传递给运算符 (:=)
.
因此运算符 ##.
,它只是分别调用 Js.Unsafe.get
和 Js.Unsafe.set
的语法糖。 (同样,obj##m x y
是 Js.Unsafe.meth_call obj "m" [|x; y|]
的语法糖。)
JSOO 不是深入修改 OCaml 编译器以实际将 Javascript 对象映射到 OCaml 对象并正确识别 getters/setters,而是依赖 OCaml 对象仅用于输入 [=30] 的薄层=] 并在执行时完全忽略它们。
不确定为什么需要所有这些运算符。这是什么道理?为什么常规的 OCaml 对象语法不够用?
obj##.m
obj##.m := e
obj##m
OCaml 对象没有属性。如果你写 obj#m
,你是在对象 obj
上调用方法 m
。如果你写 obj#m := e
,你再次调用对象 obj
上的方法 m
并且它 returns 类型 'e ref
的值,然后传递给运算符 (:=)
.
因此运算符 ##.
,它只是分别调用 Js.Unsafe.get
和 Js.Unsafe.set
的语法糖。 (同样,obj##m x y
是 Js.Unsafe.meth_call obj "m" [|x; y|]
的语法糖。)
JSOO 不是深入修改 OCaml 编译器以实际将 Javascript 对象映射到 OCaml 对象并正确识别 getters/setters,而是依赖 OCaml 对象仅用于输入 [=30] 的薄层=] 并在执行时完全忽略它们。