簡體   English   中英

如何在javascript中使用clojurescript中的復雜返回對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM