2012-09-10 95 views
2

我想寫一個返回如[「富」,「酒吧」]或(名單「富」,「酒吧」),一個複雜的項目一個clojurescript功能,我想成爲能夠從JavaScript調用此函數並獲取返回值的各個部分。如何做呢?在我的情況下,我要返回的vector/list/collection中的項目數量已知,並且該集合應該保持有序。如何使用複雜的返回對象從clojurescript在JavaScript

這是我的clojurescript功能。如果事情變得簡單,我可以在這裏做一些不同的事情。只是不知道那會是什麼。

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

下面是它編譯爲javascript後的樣子。這部分完全由前面的代碼確定/生成。爲了在這裏做出改變,我必須知道如何在clojurescript中調整前一部分。

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

當我做在JavaScript下面,我看到一個警告框彈出與[「富」,「酒吧」]

alert(my.ns.myFn()); 

但是,如果我嘗試以下方法,警報顯示「未定義「而不是」富「。

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

我應該採取什麼不同的方式讓警報顯示「foo」? (嗯,我想我可以編寫更多的clojurescript使用該值,看看如何編譯爲JavaScript ...)

+0

你能發佈你的代碼嗎?並更好地解釋你想達到什麼目標? – Oriol

回答

5

在clojurescript:

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

在javascript:

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

...使用result_array作爲一個正常的JavaScript數組。

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); 
相關問題