Clojure中的函数定义

时间:2013-06-01 15:49:01

标签: clojure

我正在尝试使用parse-ez,我不明白为什么我会得到结果。当我在函数中定义似乎是等效代码的东西时,我会得到不同的结果:

(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 个答案:

答案 0 :(得分:3)

您必须在line-pos内拨打fooParse。像这样:

(defn fooParse [] (line-pos))

正如您在docs中看到的那样。读者宏#()扩展为:

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

答案 1 :(得分:2)

要在Clojure中调用一个函数,你可以

(my-function)

另一方面,如果你说

my-function

这只是对函数的引用。 (“参考”在这里不是一个技术术语,但我认为这清楚地说明了我的意思。)在你的第二个例子中,函数fooParse的“返回值”是函数的第二种形式 - 它是line-pos而不是(line-pos) - 因此fooParse返回的内容是对函数line-pos的引用,而不是返回值的引用line-pos。我想你想要的是

(defn fooParse
  []
  (line-pos))