2012-09-10 2 views
2

[ "foo" "bar"] 또는 (foo "bar")와 같은 복잡한 항목을 반환하는 clojurescript 함수를 작성하고 싶습니다. javascript에서이 함수를 호출하고 반환 값 부분에서 얻을 수 있습니다. 어떻게 할 수 있습니까? 필자의 경우, 반환 할 벡터/목록/컬렉션의 항목 수는 미리 알고 있으며 컬렉션은 계속 주문해야합니다.자바 스크립트에서 clojurescript의 복잡한 반환 객체를 사용하는 방법

내 clojurescript 기능은 다음과 같습니다. 나는 물건을 더 쉽게 만들면 여기에서 다르게 할 수 있습니다. 그게 뭔지 모를뿐입니다.

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

다음은 자바 스크립트로 컴파일 된 후의 모습입니다. 이 부분은 이전 코드 비트에 의해 완전히 결정/생성됩니다. 여기서 변경하려면 클로저 스크립트에서 이전 부분을 조정하는 방법을 알아야합니다.

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

나는 자바 스크립트에 다음, 내가 경고 상자가 [ "foo는" "바"]로 나타

alert(my.ns.myFn()); 

하지만 다음을하려고하면 경고가 표시됩니다 "정의되지 않은 투시 않는 경우 "대신"foo "를 사용합니다.

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

나는 "foo는"을 표시하는 경고를 얻을 다르게 어떻게해야합니까? (흠. 값을 사용하고 자바 스크립트로 컴파일 할 때 어떻게 보이는지 클로저 스크립트를 작성할 수 있다고 생각합니다 ...)

+0

코드를 게시 할 수 있습니까? 그리고 당신이 달성하고자하는 것을 더 잘 설명하십시오. – Oriol

답변

5

clojurescript에서 :

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

자바 스크립트 :

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

는 ... 정상적인 스크립트 배열로 result_array를 사용한다.

0

그래서 myFn과 반환 값을 사용하기 위해 더 많은 clojurescript를 작성했습니다. 생성 된 스크립트는 다음과 같다 :

var tmp = my.ns.myFn.call(null); 
var first = cljs.core.first.call(null, tmp); 
var second = cljs.core.nth.call(null, tmp, 1); 
관련 문제