-6ren">
gpt4 book ai didi

clojure - the -> 宏和偏函数

转载 作者:行者123 更新时间:2023-12-02 04:22:40 25 4
gpt4 key购买 nike

为什么我不能在 -> 的链式调用中使用部分函数或匿名函数?

(->
"123"
seq
sort
reverse
(partial apply str))
=> #<core$partial$fn__4230 clojure.core$partial$fn__4230@335f63af>

我原以为部分函数会被创建并立即应用于前一个函数的结果,但它实际上返回了自己。

具有一个参数的简单函数链当然可以毫无问题地工作:

(->
"123"
seq
sort
reverse
clojure.string/join)

最佳答案

由于 ->->> 只是宏,您可以使用 macroexpand-1 测试 -> 扩展到什么(注意引号')

user=> (macroexpand-1 '(->
"123"
seq
sort
reverse
(partial apply str)))

(partial (reverse (sort (seq "123"))) apply str)

这就是为什么你得到一个函数而不是一个字符串 - 结果是从 reverseapply str< 返回的集合(它是一个函数)的一部分 作为参数。

如果出于某种原因你需要在 -> 中应用一个函数,你应该将它包裹在括号中:

user=> (macroexpand-1 '(->
"123"
((partial sort)) ; we add parens around so -> have plase to insert
))
((partial sort) "123")

或者您可以使用 ->> 宏,因为它与此处的 partial 做同样的工作:

((partial str "hello ") "world")

"hello world"

(->> (str "hello ") "world")    ; expands to (str "hello " "world")

"hello world"

关于clojure - the -> 宏和偏函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29188854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com