为Clojure匿名函数声明伪(未使用)参数
如回答中所述,Clojure通过正文中引用的最大参数索引(例如,如果最大引用参数为为Clojure匿名函数声明伪(未使用)参数,clojure,arguments,anonymous-function,Clojure,Arguments,Anonymous Function,如回答中所述,Clojure通过正文中引用的最大参数索引(例如,如果最大引用参数为%4,则该匿名函数有4个参数)确定匿名函数(通过#()定义)的参数数 问:是否有一些语法告诉Clojure编译器匿名函数需要一个参数,甚至不引用该参数?或者,在这种情况下,唯一的“干净方法”是使用?(*“Clean way”:我知道在大多数情况下,您可以在不影响函数的情况下引用伪参数——请参见下文,但我希望避免这种变通方法。) 我的用例:我有一个函数(defn foo[predicate]),其中predicate
%4
,则该匿名函数有4个参数)确定匿名函数(通过#()
定义)的参数数
问:是否有一些语法告诉Clojure编译器匿名函数需要一个参数,甚至不引用该参数?或者,在这种情况下,唯一的“干净方法”是使用?(*“Clean way”:我知道在大多数情况下,您可以在不影响函数的情况下引用伪参数——请参见下文,但我希望避免这种变通方法。)
我的用例:我有一个函数(defn foo[predicate])
,其中predicate
只需要一个参数,我想用一个总是返回true
的谓词测试foo
。(例如,#(true)
)这会导致一个算术异常
,因为解释器认为#(true)
需要零参数
在这种情况下,我可以使用一些聪明的黑客,比如#(或true%)
,但是:
fn
-变体一样需要输入#[1](正确);;匿名函数接受一个参数
否。只需使用fn
。这就是它的用途。不。只要使用fn
。这就是它的用途。如果它是一个固定回报,您可以使用:
如果不是,则可以将fn
与rest参数一起使用:
(fn [& _]
some-side-effect-expression)
; ==> non functional value
事实上,这可以在不需要所有passs参数的高阶函数上完成:
(some-fun (fn [a b & _] (+ a b)) '(1 2 3 4 5))
; ==> (3 5 7 9)
如果是固定回报,您可以使用: 如果不是,则可以将
fn
与rest参数一起使用:
(fn [& _]
some-side-effect-expression)
; ==> non functional value
事实上,这可以在不需要所有passs参数的高阶函数上完成:
(some-fun (fn [a b & _] (+ a b)) '(1 2 3 4 5))
; ==> (3 5 7 9)
如果您坚持使用
#(…)
语法,您可以编写
#(do % true)
。。。无论你想返回什么,都不会招致运行时惩罚
但是,(常为true)
,正如建议的那样,是惯用的,并且接受任何参数列表:
((constantly true) 1 2 "Buckle my shoe");true
如果您坚持使用
#(…)
语法,您可以编写
#(do % true)
。。。无论你想返回什么,都不会招致运行时惩罚
但是,(常为true)
,正如建议的那样,是惯用的,并且接受任何参数列表:
((constantly true) 1 2 "Buckle my shoe");true
关于具体问题,而不是一般问题——Clojure 1.9将包括您正在寻找的谓词作为。关于具体问题,而不是一般问题——Clojure 1.9将包括您正在寻找的谓词作为。