2

我想编写一个 clojurescript 函数,它返回一个复杂的项目,如 ["foo" "bar"] 或 (list "foo" "bar"),我希望能够从 javascript 调用此函数并获取部分返回值。如何做呢?在我的例子中,我返回的向量/列表/集合中的项目数是预先知道的,并且集合应该保持有序。

这是我的 clojurescript 函数。如果它让事情变得更容易,我可以在这里做一些不同的事情。只是不知道那会是什么。

(defn myFn [] ["foo" "bar"])

这是它编译为 javascript 后的样子。这部分完全由前一段代码确定/生成。要在此处进行更改,我必须知道如何调整 clojurescript 中的前一部分。

my.ns.myFn = function myFn() {
  return cljs.core.PersistentVector.fromArray(["foo", "bar"], true)
};

当我在 javascript 中执行以下操作时,我看到一个警报框弹出 ["foo" "bar"]

alert(my.ns.myFn());

但是,如果我尝试以下操作,警报会显示“未定义”而不是“foo”。

var tmp = my.ns.myFn();
alert(tmp[0]);

我应该怎么做才能让警报显示“foo”?(嗯。我想我可以编写更多的 clojurescript 来使用该值,并查看它在编译为 javascript 时如何显示......)

4

2 回答 2

5

在clojurescript中:

(ns foo.core) (defn ^:export bar [x] (array 0 1 2))

在 JavaScript 中:

var result_array = foo.core.bar(x);

...result_array用作普通的 javascript 数组。

于 2012-10-03T18:43:08.957 回答
0

所以我写了更多的 clojurescript 来使用 myFn 和它的返回值。生成的 javascript 如下所示:

var tmp = my.ns.myFn.call(null);
var first = cljs.core.first.call(null, tmp);
var second = cljs.core.nth.call(null, tmp, 1);
于 2012-09-11T04:33:36.017 回答