2013-06-01 66 views
1

我試圖使用parse-ez,我不明白爲什麼我會得到我的結果。當我定義什麼對我來說似乎是等效代碼的功能,我得到不同的結果:Clojure中的函數定義

(use 'protoflex.parse) 
; 
; Use an anonymous function, this returns [1 1] 
(parse #(line-pos) "") 
; 
; Use an actual function, this returns what I think is a function pointer 
(defn fooParse [] line-pos) 
(parse fooParse "") 

有什麼區別?

回答

2

要調用Clojure中的一個功能,你做

(my-function) 

如果,另一方面,你說

my-function 

這僅僅是一個參考該功能。 (「參考」在這裏不是一個技術術語,但我認爲這說明了我的意思。)在第二個示例中,函數fooParse的「返回值」是函數的第二種形式 - 它是line-pos,而不是(line-pos)-因此fooParse返回的內容是對函數line-pos的引用,而不是的返回值line-pos。我想你想要的是

(defn fooParse 
    [] 
    (line-pos)) 
3

您必須致電line-posfooParse。像這樣:

(defn fooParse [] (line-pos)) 

正如您在docs中所見。讀者宏#()擴展爲:

#(...) => (fn [args] (...))