仅传递第n个参数

时间:2016-02-18 02:04:59

标签: clojure functional-programming

是否有内置方法只将第n个参数传递给另一个函数。考虑一下:

(defn nth-arg [i & args]
  (nth args i))

为方便起见:

(def arg1 (partial nth-arg 0))
(def arg2 (partial nth-arg 1))
(def arg3 (partial nth-arg 2))

这样可以避免像(fn [_ _ x](foo x))这样的构造:

(comp foo arg3)

1 个答案:

答案 0 :(得分:1)

没有。仅接受将在函数中使用的参数是一种很好的方式。如果您认为接受更多内容很方便,请考虑转换输入。区分功能应用程序和数据选择是一件好事。

有时您被迫创建不使用第一个参数的函数,例如在定义协议时,通常您不需要this参数,因此您只需丢弃它。在这里,最好是明确和直接地了解正在发生的事情。你不会通过委托给另一个函数来使代码变得更优雅,这只是读者的另一个心理步骤。

当它对你没有好处时,应避免苛刻的行为。你正在牺牲一个真正的好处(arity检查)。它打开你很难解释错误(opps我应该应用该向量而不是传递它!当我重构不需要第二个参数时,我有4个参数而不是3个。)