gpt4 book ai didi

javascript - 如何调用 js_of_ocaml 生成的函数?

转载 作者:搜寻专家 更新时间:2023-11-01 04:14:40 24 4
gpt4 key购买 nike

我是 JavaScript 的新手,我正在尝试使用 js_of_ocaml

我先写了一个很简单的cubes.ml:

let simple (a: int) =
a + 1234

然后编译它:

ocamlfind ocamlc -package js_of_ocaml -package js_of_ocaml.syntax \
-syntax camlp4o -linkpkg -o cubes.byte cubes.ml

然后生成 JavaScript 文件:

js_of_ocaml cubes.byte

这是生成的 cubes.js .请注意,我们在该文件中找不到 1234 或函数名称 simple

我有另一个 JavaScript 文件 Home.js,我希望函数 callSimple 调用在 cubes.js 中生成的内容。但是我不知道怎么写。谁能帮忙?

(function () {
...
function callSimple(a) {
return ???;
};
...
})();

编辑 1:

我尝试了@EdgarAroutiounian 提出的解决方案:

(* cubes.ml *)
let () =
Js.Unsafe.global##.jscode := (object%js
val simple = Js.wrap_meth_callback
(fun a -> a + 1234)
val speak = Js.wrap_meth_callback
(fun () -> print_endline "hello")
end)

它确实编译了,但没有返回正确的输出: enter image description here

如果我在 home.js 中编写:

confirm(jscode.simple(10)); // 1244 is expected
confirm(jscode.speak()); // "hello" as string is expected

第一行返回function (a){return p(c,aM(b,a))},第二行返回0。它们不是我所期望的。

最佳答案

这是一种可行的方法。

在我们打算暴露给 JavaScript 的 OCaml 代码中:

let () =
Js.Unsafe.global##.jscode := (object%js
val simple = Js.wrap_meth_callback
(fun a -> a + 1234)
val speak = Js.wrap_meth_callback
(fun () -> print_endline "hello")
end)

请注意,我正在使用 ppx 扩展,我建议您也这样做:这意味着不再有 camlp4。您可以使用以下代码编译该代码:

ocamlfind ocamlc -package js_of_ocaml.ppx -linkpkg cubes.ml -o T
js_of_ocaml T -o cubes.js

然后在你的另一个文件中,home.js

console.log(jscode.simple(10));
console.log(jscode.speak());

和一个 index.html 的:

<!DOCTYPE html>
<meta charset="utf-8">
<body>
<script src="cubes.js"></script>
<script src="home.js"></script>
</body>

这应该有效。

关于javascript - 如何调用 js_of_ocaml 生成的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37073235/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com