如何将伪参数传递给clojure lambdas?

时间:2017-03-16 05:09:51

标签: lambda clojure functional-programming jvm lisp

我正在使用Reagent编写一些代码,其中一部分涉及编写一些回调和状态操作。

其中一些地方将使用默认参数调用函数,我不想对它们执行任何操作。我只想返回一个常量值。

例如,当我使用#(true)之类的东西时,我会得到一个例外,我必须写(fn [_] true)。有没有办法让lambda速记知道它获取参数而不使用它?

1 个答案:

答案 0 :(得分:1)

#(do % true)

但老实说,我只是在没有宏的情况下编写完整版本。它使意图更加清晰。

令人遗憾的是,Clojure似乎没有Haskell const函数的版本。它接受一个值并返回一个抛出其参数并返回值的函数。这种情况非常方便。然而,为您的库编写自己的版本是微不足道的:

(defn const [value]
    (fn [_] value))

(some-hof (const true))

有了一些创造力,让const支持任意数量的论证可能并不困难。

编辑:

@amalloy指出Clojure确实有这样的功能! core/constantly