2013-01-02 75 views
1

如果我將不得不在Java中的字符串數組在Java字符串數組的Clojure

public static void main (String [] args) 
{ 
     int x = Integer.parseInt(args[2]); 
} 

什麼是這個代碼Clojure中的等效?

回答

5

的Clojure可以直接調用Java方法,所以假設你的函數傳遞一個String數組,你可以這樣做:

(defn my-parse [args] 
    (Integer/parseInt (aget args 2))) 

注意事項:

  • aget是獲取一個元素的功能來自Java數組。
  • 語法(ClassName/methodName ...)用於在Clojure中調用Java靜態方法
  • 當需要選擇正確的方法實現時,Clojure將自動使用反射。所以在這種情況下,它不需要在編譯時知道args數組中存儲了什麼類型的對象 - 它會在運行時運行,因此它們是Strings並相應地對待它們。

這也值得注意那Clojure實際上可以是解構 Java數組。所以,你也可以這樣做:

(defn my-parse [[s0 s1 s2 & more-strings]] 
    (Integer/parseInt s2)) 

在這段代碼,s0取第一個數組元素的值,s1第二,s2第三和more-strings是任何剩餘的參數序列

+0

因爲這個對象將在java中循環調用時,我會在每次調用循環時提取數組中的元素,並將其更新到java中的另一個數組中。這個代碼在clojure中等價於什麼。 – aceminer

+0

@aceminer - 不太清楚你的意思 - 可能應該是一個單獨的問題? – mikera

+0

也許我可以開始另一個可能更清晰的問題。 – aceminer