假设我有一个需要两个参数的函数,并且参数的顺序会影响结果.
是否可以将第一个参数传递给partial或comp函数而另一个参数除以它,如下所示:
(defn bar [arg1 arg2] (- arg1 arg2))
(def baz (partial (bar arg1)))
(def qux (comp str (bar arg1)))
(baz arg2)
(qux arg2)
Run Code Online (Sandbox Code Playgroud)
如果我想将arg2传递给函数,我可以这样做吗?
(def baz2 (partial (bar _ arg2)))
(def qux2 (comp str (bar _ arg2)))
(baz arg1)
(qux arg1)
Run Code Online (Sandbox Code Playgroud)
partial只在左侧"填写"参数,所以如果你需要跳过参数,你必须使用fn:
(def baz2 #(bar %1 arg2))
Run Code Online (Sandbox Code Playgroud)
还要注意的是comp要求所有的参数是功能,让您qux和qux2实际上是无稽之谈.他们应该是:
(def qux (comp str baz))
(def qux2 (comp str baz2))
Run Code Online (Sandbox Code Playgroud)
在一般情况下,Clojure的核心功能将会把最有可能改变的变量最后使组成与comp和partial更自然.(例如,集合参数在Clojure中几乎总是最后的,除了into将它放在第一位之外的地方.)当你设计自己的函数时,你应该坚持这个约定,这样你就可以更容易地编写你的函数.
| 归档时间: |
|
| 查看次数: |
2457 次 |
| 最近记录: |