当你在Clojurescript中编写高阶函数时,实际上可以省略传入函数的参数。
例如,以下是合法的Clojurescript代码,但非法的Clojure代码:
(def x(原子5))
(swap!x(fn [] 6))
高阶“交换!”函数需要一个带一个参数的函数,但你可以省略它,程序仍然可以正常编译/运行。
如果它使我的Clojurescript代码更干净,那么使用此功能会被视为不良形式吗?或者,它只是滥用Clojurescript限制?有什么意见吗?
感谢您的想法!
答案 0 :(得分:9)
对我而言(fn [_] 6)
看起来非常惯用,而不是(fn [] 6)
更加晦涩难懂。它更具表现力,因为它明确表明该论点被忽略了。
编写完整(正确)表单的另一个好处是代码的可移植性。
编辑:顺便说一句,你的例子可以不断改写:(swap! x (constantly 6))
。 constantly
创建一个接受任意数量参数的函数,并始终返回传递给constantly
的参数。