问题标签 [js-of-ocaml]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
504 浏览

macos - 找不到 js_of_ocaml.ppx

我正在尝试运行 js_of_eliom,但它似乎没有 ppx_deriving 这是我在制作时收到的消息:

当我执行 ocamlfind 查询 js_of_ocaml.ppx 时,我得到了这个:

但我已经安装了 ppx_deriving,opam 列表显示它:

我正在使用 el capitan(10.11) 在 mac osx 中运行,知道为什么会这样吗?

编辑

哦,对不起,我还安装了 js_of_ocaml,这出现在我的 ocamlfind 中:

0 投票
1 回答
558 浏览

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

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

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

然后遵守它:

然后生成 JavaScript 文件:

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

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

编辑1:

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

它确实编译了,但没有返回正确的输出: 在此处输入图像描述

如果我写home.js

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

0 投票
1 回答
863 浏览

ocaml - 使兼容ocaml、camlp4、ppx、node、js_of_ocaml、ocamlbuild

安装npmand后node,编译 OCaml 文件时js_of_ocaml出现错误,因此我这样做了opam switch reinstall system

然后,我意识到ocamlfind不再工作了:

PS:node --versionv6.1.0npm --version3.8.6; ocaml -versionThe OCaml toplevel, version 4.03.0. js_of_ocaml --version2.7,但在之后opam swtich reinstall system,它给了-bash: /Users/softtimur/.opam/system/bin/js_of_ocaml: No such file or directory

有谁知道如何使所有这些软件包兼容?


早些时候:这是安装npmand之后node和之前的编译错误opam switch reinstall system

另一种方式也报错:


最初: 我最初的目标是编写和编译cubes.ml这样 1)它包装一个 OCaml 函数来制作一个可以在 Web 中调用的 JS 函数;2)OCaml函数和字节码可以在Linux下用命令行测试。

cubes.ml如下:

然后,ocamlfind ocamlc -package js_of_ocaml.ppx -linkpkg cubes.ml -o T应该生成T这样./T应该返回hello的。并且js_of_ocaml T -o cubes.js应该生成cubes.js这样的函数jsOneArgument可以cubes.js很好地被其他JS或HTML文件调用。

在我弄乱包裹之前,./T返回Unimplemented Javascript primitive caml_pure_js_expr!,这就是我安装的原因npmnode等等......

0 投票
1 回答
678 浏览

ocaml - 未实现的 Javascript 原语 caml_pure_js_expr

我想编写和编译cubes.ml这样1)它包装了一个OCaml函数来制作一个可以在Web中调用的JS函数;2)OCaml函数和字节码在Linux下仍然可以在命令行中测试。

cubes.ml如下:

以下 2 个命令生成一个字节码T,并转换Tcubes.js

我测试过 的函数可以很好jsOneArgumentcubes.js被其他的JS或者HTML文件调用。所以我的 1) 目标得到了满足。

但是,我的 2) 目标无法满足:./T返回错误:

虽然node cubes.js返回hello,但我确实需要能够./T直接测试,因为当出现错误时,它会很好地显示错误位置,而显示的信息node cubes.js是不可读的......

那么有谁知道如何解决这个问题?

PS:node --versionv6.1.0npm --version3.8.6; ocaml -versionThe OCaml toplevel, version 4.02.3. js_of_ocaml --version2.7.

0 投票
2 回答
491 浏览

javascript - 如何将一个简单的命令行 OCaml 脚本编译成 Javascript

我有一个简单的命令行 OCaml 应用程序,它执行计算Sys.argv.(1)并将结果输出到标准输出。我可以用 将它编译成 Javascript js_of_ocaml,但它给了我很多关于caml_ml_output_char未定义的错误。我通过删除 printfs 修复了这些错误,因此它运行,但它在运行时冻结了 firefox。

如何将简单的 OCaml 命令行脚本干净地编译成基于 Javascript 的网页;不维护分叉版本或冻结浏览器?

0 投票
1 回答
267 浏览

js-of-ocaml - 包装一个返回记录的 OCaml 函数

我已经定义了一个 OCaml 函数manipulate: string -> string。我把它包装成一个 JS 函数jsManipulate

现在,我想manipulate返回更多信息,而不仅仅是一个字符串;我希望它返回一条记录: OCaml 格式的manipulate: string -> myrecord位置myrecord = { result: string; info_1: int; info_2: bool }

在这种情况下,有谁知道如何包装manipulate以制作一个 JS 函数,该函数还从 JS 字符串返回一个 JS 记录(或对象?)?

PS:我只想调用manipulate一次(而不是3次)来构建JS对象。

0 投票
1 回答
190 浏览

js-of-ocaml - 从 Eliom 客户端代码调用外部 Js 库

我现在正在尝试 Eliom,看看我能用它做什么。我想从我的 eliom 客户端代码中调用一个外部 javascript 库。我正在尝试的示例代码如下:

相当于简单的javascript:

从 OCaml 代码对 Three.js 的简单调用。现在,我还不能 100% 确定语法,但我观察到 THREE 是未定义的,因为这段代码是在加载 Three.js 之前执行的。

我该怎么做: 1)在 js_of_ocaml 生成的文件之前包含 js 文件;或者 2) 在生成的 js 文件中包含 Three.js;或 3) 其他选择?

目前,页面是这样生成的:

先感谢您

0 投票
1 回答
93 浏览

js-of-ocaml - 包装一个接收 JS 对象(记录)的 OCaml 函数

我想在 OCaml 中编写一个非常简单的函数,并将其包装成一个 JS 函数jsGetjs_of_ocaml这样就jsGet可以将 JS 对象(或记录)作为输入。

我尝试了以下代码:

wrap.ml

wrap.ml编译得很好,但是,运行Home.js返回undefined作为输出。

有谁知道如何纠正这个?

0 投票
1 回答
414 浏览

javascript - 是否可以包装一个异步 JS 函数并在 OCaml 中使用它?

我们可以使用js_of_ocaml来包装一个 JS 函数,然后在 OCaml 中调用它。当 JS 函数是异步的(即,包括承诺并需要时间)时,我无法制作一个工作示例。

我要包装的异步JS函数JSfun如下。变量x设置为"here"2 秒后,这是我要返回的值。

我们可以成功调用JSfunJS 并按"runJS here"预期得到:

但是,OCaml 很难模仿这种链接。要包装JSfunOCaml,似乎我们必须使用:

除了这样调用之外,我没有其他想法:

不出所料,它不起作用:我们确实看到"inside setTimeout"print 了,这证明JSfun已被调用,但返回值不存在。

这是jsfiddle。我还做了一个包装同步 JS 函数的工作示例。在 OCaml 中,包装是:

那么有人有解决方案、想法或解决方法吗?

0 投票
1 回答
181 浏览

d3.js - Wrapping fused getter-setter functions

I'm having trouble wrapping a subset of d3-force using jooc. The library does not use object properties and instead implements fused getter-setter functions, e.g.

I'd like to find a way to emulate the same kind of polymorphism in OCaml. Here's what I currently have

And here's what I'm after