我有一个函数,它使用一个可变变量,该变量接受字符串并返回字符串。(它是一个read-eval-print-loop解释器(
我试着这样导出:
let () =
Js.export_all
(object%js
method js_run_repl = Js.wrap_callback js_run_repl
end)
以下是导出的函数片段
let js_run_repl str =
match String.(compare str "quit") with
| 0 -> "bye"
| _ -> ...
不管我的输入如何,它总是返回bye
,直接在ocaml中调用函数会产生预期的行为。以下是节点的输出:
> var mod = require('./main.bc');
undefined
> mod.js_run("constant P : Prop");
MlBytes { t: 0, c: 'bye', l: 3 }
>
这也是为什么函数被称为js_run
而不是js_run_repl
的特殊之处。后者根据节点未定义。
let () =
Js.export_all
(object%js
method js_run_repl str =
str
|> Js.to_string
|> js_run_repl
|> Js.string
end)
我必须将字符串显式转换为ocaml字符串,然后再转换回js