Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在映射函数(Clojure)中使用互操作构造函数_Clojure - Fatal编程技术网

在映射函数(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