什么是Scala相当于Clojure的线程宏?

时间:2013-11-14 22:32:11

标签: scala clojure

Clojure有“线程宏”->->>。我很确定在Scala代码中可以使用类似的构造来替换代码:

var myObj = MyObject(x, y, z)
myObj = transform(myObj, abc)
myObj = transformMore(myObj, def)
myObj = transformYetMore(myObj, bar)

我希望看到一个可行的例子,看看它是否看起来不错。我很确定你不需要在Scala案例中使用宏。

1 个答案:

答案 0 :(得分:-1)

clojure中的线程宏用于解决过度嵌套表达式的问题,因此在scala中使用某种线程实用程序是非常罕见的(虽然原则上可以像Stefan提到的那样)因为普通的集合函数很好< / p>

def square(x: Int) = x * x
def plusOne(x: Int) = x + 1
List(1,2,3,4).map(square).map(plusOne)

甚至是冗长的:

someCollection.map(...)
              .flatMap(...)
              .filter(...)
              .map(...)
              ...

另一种选择是理解(对期权和期货更有用)。如果您对此不满意,则不需要使用宏,此类构造上有很多博客文章,例如this one