2

["foo" "bar"]や(list "foo" "bar")のような複雑なアイテムを返すclojurescript関数を作成したいのですが、この関数を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」ではなく「undefined」と表示されます。

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

アラートに「foo」を表示させるには、別の方法で何をすればよいですか?(うーん。値を使用するためにさらにclojurescriptを記述して、javascriptにコンパイルしたときにどのように表示されるかを確認できると思います...)

4

2 に答える 2

0

そこで、myFn とその戻り値を使用する clojurescript をさらに作成しました。生成された 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 に答える