和 "thread-last"宏 ->-6ren"> 和 "thread-last"宏 ->-我正在研究 problem #74在4clojure.com,我的解决方案如下: (defn FPS [s] (->> (map read-string (re-seq #"[0-9]+"-6ren">
gpt4 book ai didi

Clojure: "thread-first"宏 -> 和 "thread-last"宏 ->

转载 作者:行者123 更新时间:2023-12-05 08:15:38 28 4
gpt4 key购买 nike

我正在研究 problem #74在4clojure.com,我的解决方案如下:

(defn FPS [s]
(->>
(map read-string (re-seq #"[0-9]+" s))
(filter #(= (Math/sqrt %) (Math/floor (Math/sqrt %))))
(interpose ",")
(apply str)))

效果很好。但是如果我使用“线程优先”宏 ->

(defn FPS [s]
(->
(map read-string (re-seq #"[0-9]+" s))
(filter #(= (Math/sqrt %) (Math/floor (Math/sqrt %))))
(interpose ",")
(apply str)))

它返回:ClassCastException clojure.lang.LazySeq cannot be cast to clojure.lang.IFn clojure.core/apply (core.clj:617)

为什么这道题中的“->>”不能换成“->”?

最佳答案

Thread-last 宏 (->>) 将每个 for 作为下一个表单的 last 元素插入。线程优先宏 (->) 将其作为第二个 元素插入。

所以,这个:

(->> a
(b 1)
(c 2))

转换为:(c 2 (b 1 a)),而

(-> a
(b 1)
(c 2))

转换为:(c (b a 1) 2)

关于Clojure: "thread-first"宏 -> 和 "thread-last"宏 ->,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26034376/

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