函数组合或管道运算符

时间:2017-04-01 10:23:42

标签: clojure

我有两个功能:

user=> (def tmp (classificator.db/get-questions classificator.db/db))
#'user/tmp
user=> (def result (map classificator.core/transform-data tmp))
#'user/result

我传递给第二个函数的第一个函数返回数据。

我想写一个没有tmp变量的表达式:

user=> (-> (classificator.db/get-questions classificator.db/db) (map classificator.core/transform-data))

IllegalArgumentException Don't know how to create ISeq from: classificator.core$transform_data  clojure.lang.RT.seqFrom (RT.java:542)

看起来我没有误认为->宏用法。我该如何解决?

1 个答案:

答案 0 :(得分:2)

线程优先宏->将参数放在剩余表单的第一个位置,但是你希望它在最后。您可以改为使用最后一个宏->>

(->> (classificator.db/get-questions classificator.db/db) 
     (map classificator.core/transform-data))

(->> classificator.db/db
     (classificator.db/get-questions)
     (map classificator.core/transform-data)))