1

如果我在java中有一个字符串数组

例子

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

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

4

1 回答 1

5

Clojure 可以直接调用 Java 方法,因此假设您的函数传递了一个字符串数组,您可以这样做:

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

注意事项:

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

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

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

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

于 2013-01-02T03:59:57.723 回答