【问题标题】:call ClojureScript from Javascript从 Javascript 调用 ClojureScript
【发布时间】:2015-10-16 22:14:21
【问题描述】:

如何从 Javascript 调用 ClojureScript 代码(不是反过来!)。

call Clojure from Java 已经可以了,但我不知道如何在 ClojureScript 中进行等效操作。

【问题讨论】:

标签: javascript clojure clojurescript


【解决方案1】:

使用^:export导出你想要在js中可用的函数,然后简单地调用它为my.ns.fn()

cljs:

(ns hello-world.core)

(defn ^:export greet [] "Hello world!")

js:

hello_world.core.greet()

the accepted answer "Clojurescript interoperability with JavaScript" 了解详细信息。

【讨论】:

  • 截至 2020 年,^:export 是多余的。
【解决方案2】:

Clojurescript 编译为 Javascript,因此您可以按原样使用它。

Datascript 是学习这一点的重要灵感来源,它是用 Clojurescript 编写的,并按原样通过 vanilla javascript javascript 使用。

在伪代码中给出:

<script src="https://github.com/tonsky/datascript/releases/download/0.11.6/datascript-0.11.6.min.js"></script>
...
...
var d = require('datascript');
// or 
// var d = datascript.js;

var db = d.empty_db();
var db1 = d.db_with(db, [[":db/add", 1, "name", "Ivan"],
                       [":db/add", 1, "age", 17]]);
var db2 = d.db_with(db1, [{":db/id": 2,
                        "name": "Igor",
                        "age": 35}]);

var q = '[:find ?n ?a :where [?e "name" ?n] [?e "age" ?a]]'; 
assert_eq_set([["Ivan", 17]], d.q(q, db1));
assert_eq_set([["Ivan", 17], ["Igor", 35]], d.q(q, db2));

你可以看到这个blog entry的互操作部分。

最后,检查数据脚本 javascript-based test suite

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-23
  • 1970-01-01
相关资源
最近更新 更多