【问题标题】:How do I pass dummy arguments to clojure lambdas?如何将虚拟参数传递给 clojure lambdas?
【发布时间】:2017-08-07 03:15:18
【问题描述】:

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

其中一些地方会调用带有默认参数的函数,我不想对它们做任何事情。我只想返回一个常量值。

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

【问题讨论】:

标签: lambda clojure functional-programming jvm lisp


【解决方案1】:
#(do % true)

但老实说,我只是写了没有宏的完整版本。它使意图更清楚。

很遗憾,Clojure 似乎没有 Haskell 的 const 函数版本。它接受一个值并返回一个函数,该函数丢弃其参数并返回该值。对于这种情况非常方便。但是,为您的库编写自己的版本很简单:

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

(some-hof (const true))

有了一些创意,让const 支持任意数量的参数可能并不难。


编辑:

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

【讨论】:

  • clojure.core/constantly
  • @amalloy Pfft。我不知道我是怎么错过的。谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多