为什么会这样。ocaml的js_中需要运算符吗?

为什么会这样。ocaml的js_中需要运算符吗?,ocaml,js-of-ocaml,Ocaml,Js Of Ocaml,不确定为什么需要所有这些操作员。理由是什么?为什么常规的OCaml对象语法还不够 obj##.m obj##.m := e obj##m 此处的文档:OCaml对象没有属性。如果您编写objm,那么您正在调用对象obj上的方法m。如果您写入objm:=e,那么您将再次调用对象obj上的方法m,它将返回类型为“e ref”的值,然后将该值传递给运算符:= 因此,运算符.,它只是分别调用Js.Unsafe.get和Js.Unsafe.set的语法糖。类似地,objm x y是Js.Unsafe.m

不确定为什么需要所有这些操作员。理由是什么?为什么常规的OCaml对象语法还不够

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

此处的文档:

OCaml对象没有属性。如果您编写objm,那么您正在调用对象obj上的方法m。如果您写入objm:=e,那么您将再次调用对象obj上的方法m,它将返回类型为“e ref”的值,然后将该值传递给运算符:=

因此,运算符.,它只是分别调用Js.Unsafe.get和Js.Unsafe.set的语法糖。类似地,objm x y是Js.Unsafe.meth_调用obj m[|x;y |]的语法糖


与其深入修改OCaml编译器以将Javascript对象映射到OCaml对象并正确识别getter/setter,JSOO是一个很薄的层,它只依赖于OCaml对象来键入Javascript对象,而完全忽略它们来执行。

难道不可能创建一个模块或对象作为基类来包装js\u of\u OCaml对象吗?要摆脱升降语法。或者可能只是别名Js.Unsafe.get在本地获取?语法糖只是为了确保表达式的类型正确。如果您不关心类型,您确实可以直接调用Js.Unsafe.get或您选择的任何别名。好的,但是如果它也检查类型,那么它不仅仅是一个语法糖…?它只是一个语法糖,但是生成的OCaml代码包含大量类型强制转换e:t。编译器因此被迫检查类型。嗯,没有扩展语法的手动页面来演示它是如何工作的?就像一个前后比较。