在将Integer构造函数传递给map函数时,我收到了这个抱怨:
=> (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)
为什么我必须将Integer包装在另一个函数中才能使其工作?有没有更好的方法让它工作而不创造额外的功能?
答案 0 :(得分:2)
map接收函数,interop使用像new这样的特殊形式。和.. 使用匿名函数文字
包装它们相当容易例如
(map #(Integer. %) ["1" "2" "3"])
产生所需的结果。
答案 1 :(得分:1)
没有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
或者如果你真的需要Integer类
user> (map (comp int read-string) ["1" "2"])
(1 2)
user> (class (first *1))
java.lang.Integer