什么 - >>在Clojure意味着什么?

时间:2016-12-20 17:54:43

标签: clojure

我正在学习Clojure,我遇到了这个例子:

  (defn people-in-scenes [scenes]
     (->> scenes
         (map :subject)
         (interpose ", ")
         (reduce str)))

->>到底做了什么?

3 个答案:

答案 0 :(得分:11)

->>是"线程最后"宏。它评估一个表单并将其作为 last 参数传递到下一个表单。

您的代码相当于:

(reduce str (interpose ", " (map :subject scenes)))

或者,以不同的方式看待它:

(reduce str
            (interpose ", "
                            (map :subject scenes)))

当阅读clojure代码时,几乎必须从"里面外出"或者从"自下而上。"线程宏允许您以某些人所说的更符合逻辑的顺序读取代码。 "拿东西,首先做到这一点,接下来做,接下来......"。

答案 1 :(得分:2)

我发现阅读torazaburo(和Clojure cheatsheet)很有帮助。它们包含该语言中所有常用功能的列表。当然,其他库中还有很多其他功能。

另见->将函数作为第二个参数传递给下一个表单。

答案 2 :(得分:0)

以下内容产生相同的结果

(->> 10
    (range)
    (filter odd?)
    (map #(* 2 %))
    (reduce +))

第一个被写成这样,然后被写成那个。第二个从左到右读取为“总和小于10的双倍奇数”。

(reduce + (map #(* 2 %) (filter odd? (range 10))))

如果您来自javascript或C#,则第一个示例的内容类似于linq或javascript中的点链。

range(10).filter(odd)
         .map(x => x * 2)
         .reduce((a,b) => a + b)