在“ - >”语句

时间:2016-01-03 20:00:25

标签: clojure functional-programming lisp clojurescript

代码后面的代码不起作用,因为重新查找接受一个字符串作为第一个参数而一个正则表达式作为第二个参数。

(-> "hello"
    .toUpperCase
    (re-find #".$"))

如果我重新找到这样的代码,代码就会起作用:

(defn re-find2 [s r]
   (re-find r s))

如果我现在用re-find2替换re-find,我得到了我的预期:大写的“O”。

如果不重新包装,我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:5)

如上所述,如果所有函数只有一个参数或者将结果作为最后一个参数,则可以使用thread-last。但是,如果您还有具有多个参数的函数,并且您必须将结果传递到无法由 - >处理的特定位置。或者 - >>>,然后可能是as->宏将是你最好的选择。

此宏允许您为每个函数调用的结果指定绑定。现在结果有一个名称,您可以控制该参数的位置。看看this blog post on threading macros

答案 1 :(得分:4)

对于这种特定情况,您可以使用thread-last宏。

(->> "hello" .toUpperCase (re-find #".$"))

如果你真的需要在传递第一个和最后一个参数之间切换,你可以链接线程宏:

(-> "hello" .toUpperCase (->> (re-find #".$")))