从fn文字返回数据类型

时间:2015-06-20 10:00:47

标签: clojure

以下表达方式有效 -

((fn[n][(take n (range))]) 10)

虽然以下引发了错误 -

(#([(take % (range))]) 10)

为什么我不能从函数文字中返回数据类型?

2 个答案:

答案 0 :(得分:4)

#匿名函数宏扩展为fn形式,例如

#([1 2])

扩展为(fn* [] ([1 2]))

正如您所看到的,当您调用此函数时,您尝试返回的向量将被调用为函数,该函数将失败,因为不提供任何参数。这与您的问题相同:

#([(take % (range))])

扩展为

(fn* [x] ([(take x (range))]))

答案 1 :(得分:3)

如果您绝对想要返回"数据"使用#阅读器宏的匿名函数只需使用do

#(do [1 2])

正如@Mars所说,你也可以选择使用vector函数。

#(vector 1 2)