[英]how to use a complex return object from clojurescript in javascript
我想編寫一個clojurescript函數,該函數返回一個復雜的項目,例如[“ foo”“ bar”]或(列表“ 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時的樣子。)
在clojurescript中:
(ns foo.core) (defn ^:export bar [x] (array 0 1 2))
在javascript中:
var result_array = foo.core.bar(x);
...將result_array
用作普通的javascript數組。
因此,我編寫了更多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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.