Js_of_OCaml开发中变量后跟随的##语法是什么含义?
Js_of_OCaml 中
## 语法说明 你提到的代码片段为:
Js.coerce_opt (Dom_html.document##getElementById id)
## 是 Js_of_OCaml 专门提供的、用于和JavaScript对象交互的语法,对标原生OCaml中调用本地对象方法的单#语法,专门用来区分OCaml原生对象和绑定到OCaml侧的JS对象,具体作用如下:
- 直接调用JS对象的方法、访问JS对象的属性,不需要开发者手动编写底层FFI外部函数绑定代码,Js_of_OCaml编译器会自动将该语法编译为对应语义的JavaScript代码。
- 你代码里的
Dom_html.document是Js_of_OCaml标准库预先绑定好的浏览器全局document对象,Dom_html.document##getElementById id完全等价于原生JavaScript中的document.getElementById(id),作用是传入id查找对应的DOM元素。 - 该语法全程受OCaml类型系统约束:方法的参数类型、返回值类型都是预定义好的,传参类型错误、调用不存在的方法都会在编译阶段直接报错,比手写裸JS的类型安全性高很多。
- 注意写法区分:调用JS对象方法的格式为
对象##方法名 参数,读取JS对象属性的格式为对象##.属性名,二者不要混淆。
你代码外层包裹的Js.coerce_opt是独立的类型转换函数,作用是把JS侧可能返回null/undefined的结果转换成OCaml侧的option类型,和##语法本身没有关联。
内容的提问来源于stack exchange,提问作者Dier Hou
相关产品推荐
相关产品推荐

