【问题标题】:Are optional "call-back" parameters in Clojurescript frowned upon?Clojurescript 中的可选“回调”参数是否令人不悦?
【发布时间】:2012-10-03 10:51:05
【问题描述】:

在 Clojurescript 中编写高阶函数时,实际上可以省略传入函数的参数。

例如,以下是合法的 Clojurescript 代码,但非法的 Clojure 代码:

(def x (atom 5))

(交换!x(fn [] 6))

高阶“交换!” function 需要一个带有一个参数的函数,但你可以省略它,程序仍然可以正常编译/运行。

如果它使我的 Clojurescript 代码更清晰,使用此功能是否会被视为不好的形式?或者,它只是滥用 Clojurescript 限制吗?有意见吗?

感谢您的意见!

【问题讨论】:

  • 我发布了一个答案,但我不确定这是您要问的问题。
  • 没有真正回答您的问题,但对于这种特殊情况,您应该使用reset! 而不是swap!。它做你想做的事。

标签: clojure clojurescript


【解决方案1】:

对我来说,(fn [_] 6) 看起来非常地道,并不比 (fn [] 6) 更晦涩难懂。它更具表现力,因为它明确声明参数被忽略。

编写完整(正确)表单的另一个优点是代码的可移植性。


编辑:顺便说一句,您的示例可以使用不断重写:(swap! x (constantly 6))constantly 创建一个函数,该函数接受任意数量的参数并始终返回传递给 constantly 的参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 2012-12-12
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    相关资源
    最近更新 更多