在映射函数(Clojure)中使用互操作构造函数
在将整数构造函数传递给映射函数时,我收到了这样的抱怨:在映射函数(Clojure)中使用互操作构造函数,clojure,Clojure,在将整数构造函数传递给映射函数时,我收到了这样的抱怨: => (map Integer. ["1" "2" "3"]) CompilerException java.lang.ClassNotFoundException: Integer., compiling:(NO_SOURCE_PATH:1:1) 但是,当我将构造函数包装到函数中时,一切都正常: => (defn str-to-int [str] (Integer. str)) => (map str-to-int
=> (map Integer. ["1" "2" "3"])
CompilerException java.lang.ClassNotFoundException: Integer., compiling:(NO_SOURCE_PATH:1:1)
但是,当我将构造函数包装到函数中时,一切都正常:
=> (defn str-to-int [str] (Integer. str))
=> (map str-to-int ["1" "2" "3"])
(1 2 3)
为什么我必须在另一个函数中包装整数才能实现这一点?有没有更好的方法让它在不创建额外功能的情况下工作 map接受一个函数,interop使用一个特殊的表单,比如new。和。。 用匿名函数文本包装这些函数相当容易 比如说
(map #(Integer. %) ["1" "2" "3"])
生成所需的结果。无需java互操作。如果你只需要转换成数字
; nrepl.el 0.2.0 (Clojure 1.5.1, nREPL 0.2.3)
user> (map read-string ["1" "2"])
(1 2)
user> (class (first *1))
java.lang.Long
或者如果你真的需要整数类
user> (map (comp int read-string) ["1" "2"])
(1 2)
user> (class (first *1))
java.lang.Integer