java中的字符串数组为clojure

ace*_*ner 1 clojure

如果我在java中有一个String数组

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

在clojure中这个代码的等价物是什么?

mik*_*era 5

Clojure可以直接调用Java方法,所以假设你的函数传递了一个String数组,你可以这样做:

(defn my-parse [args]
  (Integer/parseInt (aget args 2)))
Run Code Online (Sandbox Code Playgroud)

注意事项:

  • aget 是一个从Java数组中获取元素的函数.
  • 该语法(ClassName/methodName ...)用于在Clojure中调用Java静态方法
  • 当需要选择正确的方法实现时,Clojure将自动使用反射.所以在这种情况下,它不需要在编译时知道args数组中存储了什么类型的对象 - 它将在运行时计算出它们是字符串并相应地处理它们

值得注意的是,Clojure实际上可以解构 Java数组.所以你也可以这样做:

(defn my-parse [[s0 s1 s2 & more-strings]]
  (Integer/parseInt s2))
Run Code Online (Sandbox Code Playgroud)

在此代码中,s0获取第一个数组元素的值,s1第二个,s2第三个,并且more-strings是任何剩余参数的序列