2011-06-01 106 views
11

我學習Clojure地圖parseInt函數和我有一個疑問:奇怪的錯誤時,試圖用Clojure

爲什麼當我輸入

(map vector '("1" "2" "3")) 

我得到(["1"] ["2"] ["3"])

這是確定的,因爲vector是一種功能(或幾乎我認爲是),我可以做 (vector "3")並得到["3"]

到目前爲止好,但是當我嘗試

(map Integer/parseInt '("1" "2" "3")) 

我得到一個錯誤。 parseInt不應該表現得像一個函數嗎?

然後我需要鍵入

(map #(Integer/parseInt %) '(...... 

爲什麼我不能用parseInt像功能?對我來說,這是一個功能,我可以用它喜歡

(Integer/parseInt "3") 

我感覺有點語無倫次,但我敢肯定,我做了一些錯誤,就是爲了這個,我問它...

+0

[轉換串序列爲整數(Clojure的)可能重複(HTTP ://stackoverflow.com/questions/4714923/convert-a-sequence-of-strings-to-integers-clojure) – amalloy 2011-06-01 06:29:44

回答

16

您必須將其包裝在#()(fn ...)中。這是因爲Integer/parseInt是Java方法,Java方法不能傳遞。他們沒有實現IFn接口。

Clojure基於Java構建,有時會泄漏,這是其中一種情況。

+0

非常感謝..現在很清楚:D – coco 2011-06-01 13:41:18

4

正如其他人所指出的,你需要用整數/ parseInt函數,以便將其從一個Java方法轉換爲Clojure的功能:

(map #(Integer/parseInt %) '("1" "2" "3")) 

這樣做的原因是,Clojure的功能必須實現IFN接口以便作爲參數傳遞給更高階的函數,如map

這是一個有點難看,如果你正在做這樣的轉換很多次,所以我建議你包裹解析-INT功能如下:

​​

作爲最後的選擇,你可能希望使用內置的讀字符串函數 - 這將返回整數你的情況,但也將工作雙打等:

(map read-string '("1" "2" "3")) 
+0

非常感謝..現在很清楚:D – coco 2011-06-01 13:42:22