2016-05-06 7 views
4

JavaScriptの新しい機能です。js_of_ocamlを使用しようとしています。js_of_ocamlによって生成された関数を呼び出す方法は?

私が最初に非常に単純なcubes.mlを書いた:

let simple (a: int) = 
    a + 1234 

そして、それを遵守:ここ

js_of_ocaml cubes.byte 

が生成cubes.jsです:

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

は、JavaScriptファイルを生成しました。このファイルには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))}を返し、2行目は0を返します。彼らは私が期待しているものではありません。

答えて

4

これを行う方法は1つあります。

JavaScriptにさらされることを意図し、当社のOCamlのコードで

:私はppx拡張機能を使用してい

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) 

通知は、私はあなたにもそうお勧めします。これは、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> 

をそして、それは動作するはずです。

+0

@antonrov提案されている編集内容が間違っていて、投稿のセマンティクスが変更されています。 –

+0

私はあなたが私に言及していると思います...あなたの意図するセマンティクスを詳しく教えてください。コンソールに表示する内容を指定しておけばいいと思います。 –

+0

@EdgarAroutiounianあなたが提案した内容はコンパイルされましたが、出力は私が期待するものではありません。私の更新されたOPを見てください... – SoftTimur

関連する問題