1

我正在尝试使用 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 "")

有什么不同?

4

2 回答 2

3

你必须在line-pos里面打电话fooParse。像这样:

(defn fooParse [] (line-pos))

正如您在文档中看到的那样。阅读器宏#()扩展为:

#(...) => (fn [args] (...))
于 2013-06-01T15:54:39.873 回答
2

要在 Clojure 中调用函数,您可以

(my-function)

另一方面,如果你说

my-function

这只是对函数的引用。(“引用”在这里不是一个技术术语,但我认为这清楚地表明了我的意思。)在你的第二个例子中,函数的“返回值”是函数fooParse的第二种形式 - 它line-pos不是(line-pos)- 并且所以返回的东西是fooParse函数的引用,而line-pos不是. 我想你想要的是line-pos

(defn fooParse
  []
  (line-pos))
于 2013-06-01T15:56:42.920 回答