2010-06-16 6 views
6

Java에 Clojure 코드를 포함시키고 싶습니다. This 사이트는 이것을 설정하는 기본 사항에 도움이되었지만 전달되는 유일한 인수는 String 유형입니다. 나는 ints를 사용해 보았고 그것들도 작동한다.Java에서 Clojure로 Argge 전달

제 질문은 구조화 된 데이터를 Clojure에 전달할 형식화 된 방법이 있는지 여부입니다.

[[1 2] [3 4] [5 6]] 

이 일에 대해 갈 수있는 가장 쉬운 방법은 무엇입니까 : 특히, 나는 지점의 목록이 나는 Clojure의에 통과하고 다음과 같이 보일 것 벡터로 전환 하시겠습니까? Java의 끝에 할 수있는 전처리가 있습니까? 아니면 Clojure의 끝에서 사후 처리를해야합니까? 아니면 Clojure에서 처리 할 수있는 것이 있습니까? 나는 그것이 Clojure에 숫자의 문자열과 각 튜플의 길이를 전달하고, 문자열을 벡터로 처리하게한다고 생각한다. 그러나 Clojure의 이러한 측면에는 많은 예제가 없으며 확실한 것을 놓친다면 궁금합니다.

EDIT : mikera의 답변을 보시고 자바 객체를 전달하는 데 관심이 있으십니까? 설정 /지도/등의 Clojure 형식으로 데이터를 미리 포맷하려는 경우 아래에서 내 대답을 살펴보십시오.

답변

2

데이터의 형식에 따라 조금씩 다르지만 데이터를 직접 나타내는 Java 객체를 전달하고 Clojure의 Java 상호 운용성 기능을 사용하여 읽을 수 있습니다.

직접 포인트의 자바 배열을 전달하고 같은 것을 할 수있는 : 그 경우에

(let [point (aget some-array index)] 
    (do-stuff-with-point point)) 
+0

글쎄, 내가 원하는 형식이 무엇인지 완전히 모르겠다. 지금은 거의 대부분 탐험 중이다. 귀하의 솔루션은 확실히 개체와 가장 잘 작동합니다. –

1

당신은 이미 자바에서 Clojure의 모습을 포맷 한 간단한 데이터 구조를 전달하고자 할 때를, 당신은 통과 할 수 arg에서 문자열로. 그래서 내 질문에 준 예제의 경우, 나는 패스하겠다.

"[[1 2] [3 4] [5 6]]" 

을 내 arg로 사용한다.

(defn foo [d] 
    (def data (read-string d))) 

위의 벡터를 생성합니다 예제 문자열이 전달됩니다 당신이 (ARG)를 호출하여 Clojure를 호출 한 경우, 당신은 당신의 함수의 첫 번째 단계는 인수에 readString를 호출 할 수 있습니다 in.

관련 문제