【发布时间】:2017-01-28 11:15:48
【问题描述】:
正如答案of this question 中所解释的,Clojure 确定匿名函数的参数数量(通过#() 定义),由主体中引用的最大参数索引(例如,如果最大引用参数是@987654325 @,那么那个匿名函数有4个参数)。
问题:是否有一些语法可以告诉 Clojure 编译器匿名函数需要一个参数,即使不引用该参数?或者,在这种情况下,唯一的“干净方式”* 是使用 fn syntax? (*“干净的方式”:我知道在大多数情况下,您可以在不影响功能的情况下引用虚拟参数——见下文,但我想避免这种变通方法。)
我的用例:我有一个函数(defn foo [predicate]),其中predicate 只需要一个参数,我想用一个总是返回true 的谓词来测试foo。 (即,类似于#(true)。)这会导致ArityException,因为解释器认为#(true) 需要零参数。
在这种特殊情况下,我可以使用一些巧妙的技巧,例如 #(or true %),但是:
- 键入几乎与
fn-variant 一样多。 - 如果有通用解决方案,我很感兴趣。
编辑:为了清楚起见,我正在寻找这样的东西:
#[1](true) ;; the anonymous function takes one parameter
【问题讨论】:
-
关于具体问题,而不是一般问题 - Clojure 1.9 将包含您正在寻找的谓词
any?。
标签: clojure arguments anonymous-function