2013-01-02 32 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