我正在尝试使用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 "")
有什么区别?
答案 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))