以下表达方式有效 -
((fn[n][(take n (range))]) 10)
虽然以下引发了错误 -
(#([(take % (range))]) 10)
为什么我不能从函数文字中返回数据类型?
答案 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)