首页 > 解决方案 > js_of_ocaml 从 js 调用 ocaml 中的函数

问题描述

我有一个使用可变变量的函数,该变量接受字符串并返回字符串。(它是一个读取评估打印循环解释器)

我尝试这样导出它:

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. 后者根据节点未定义。

标签: node.jsocamljs-of-ocaml

解决方案


let () =
  Js.export_all
  (object%js
    method js_run_repl str = 
      str
      |> Js.to_string
      |> js_run_repl
      |> Js.string
  end)

我必须将字符串显式转换为 ocaml 字符串并返回 js


推荐阅读