代码之家  ›  专栏  ›  技术社区  ›  Olle Härstedt

为什么是##。js_of_ocaml中需要运算符吗?

  •  0
  • Olle Härstedt  · 技术社区  · 4 年前

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

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

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

    0 回复  |  直到 4 年前
        1
  •  1
  •   Guillaume Melquiond    4 年前

    OCaml对象没有属性。如果你写 obj#m ,您正在调用方法 m 关于对象 obj 如果你写作 obj#m := e ,您再次调用方法 m 关于对象 obj 它返回一个类型为的值 '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对象,并在执行时完全忽略它们。

    推荐文章