问题标签 [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.
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 中:
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
。他们不是我所期望的。
ocaml - 使兼容ocaml、camlp4、ppx、node、js_of_ocaml、ocamlbuild
安装npm
and后node
,编译 OCaml 文件时js_of_ocaml
出现错误,因此我这样做了opam switch reinstall system
:
然后,我意识到ocamlfind
不再工作了:
PS:node --version
给v6.1.0
;npm --version
给3.8.6
; ocaml -version
给The OCaml toplevel, version 4.03.0
.
js_of_ocaml --version
是2.7
,但在之后opam swtich reinstall system
,它给了-bash: /Users/softtimur/.opam/system/bin/js_of_ocaml: No such file or directory
。
有谁知道如何使所有这些软件包兼容?
早些时候:这是安装npm
and之后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!
,这就是我安装的原因npm
,node
等等......
ocaml - 未实现的 Javascript 原语 caml_pure_js_expr
我想编写和编译cubes.ml
这样1)它包装了一个OCaml函数来制作一个可以在Web中调用的JS函数;2)OCaml函数和字节码在Linux下仍然可以在命令行中测试。
cubes.ml
如下:
以下 2 个命令生成一个字节码T
,并转换T
为cubes.js
:
我测试过 的函数可以很好jsOneArgument
的cubes.js
被其他的JS或者HTML文件调用。所以我的 1) 目标得到了满足。
但是,我的 2) 目标无法满足:./T
返回错误:
虽然node cubes.js
返回hello
,但我确实需要能够./T
直接测试,因为当出现错误时,它会很好地显示错误位置,而显示的信息node cubes.js
是不可读的......
那么有谁知道如何解决这个问题?
PS:node --version
给v6.1.0
;npm --version
给3.8.6
; ocaml -version
给The OCaml toplevel, version 4.02.3
.
js_of_ocaml --version
给2.7
.
javascript - 如何将一个简单的命令行 OCaml 脚本编译成 Javascript
我有一个简单的命令行 OCaml 应用程序,它执行计算Sys.argv.(1)
并将结果输出到标准输出。我可以用 将它编译成 Javascript js_of_ocaml
,但它给了我很多关于caml_ml_output_char
未定义的错误。我通过删除 printfs 修复了这些错误,因此它运行,但它在运行时冻结了 firefox。
如何将简单的 OCaml 命令行脚本干净地编译成基于 Javascript 的网页;不维护分叉版本或冻结浏览器?
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对象。
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) 其他选择?
目前,页面是这样生成的:
先感谢您
js-of-ocaml - 包装一个接收 JS 对象(记录)的 OCaml 函数
我想在 OCaml 中编写一个非常简单的函数,并将其包装成一个 JS 函数jsGet
,js_of_ocaml
这样就jsGet
可以将 JS 对象(或记录)作为输入。
我尝试了以下代码:
在wrap.ml
:
wrap.ml
编译得很好,但是,运行Home.js
返回undefined
作为输出。
有谁知道如何纠正这个?
javascript - 是否可以包装一个异步 JS 函数并在 OCaml 中使用它?
我们可以使用js_of_ocaml来包装一个 JS 函数,然后在 OCaml 中调用它。当 JS 函数是异步的(即,包括承诺并需要时间)时,我无法制作一个工作示例。
我要包装的异步JS函数JSfun
如下。变量x
设置为"here"
2 秒后,这是我要返回的值。
我们可以成功调用JSfun
JS 并按"runJS here"
预期得到:
但是,OCaml 很难模仿这种链接。要包装JSfun
OCaml,似乎我们必须使用:
除了这样调用之外,我没有其他想法:
不出所料,它不起作用:我们确实看到"inside setTimeout"
print 了,这证明JSfun
已被调用,但返回值不存在。
这是jsfiddle。我还做了一个包装同步 JS 函数的工作示例。在 OCaml 中,包装是:
那么有人有解决方案、想法或解决方法吗?
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