gpt4 book ai didi

scala - 与Clojure的线程宏等效的Scala是什么?

转载 作者:行者123 更新时间:2023-12-04 08:52:31 25 4
gpt4 key购买 nike

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

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

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

最佳答案

好问题!我可以想到几个类似的例子可以派上用场的情况。举个例子,我正在使用一个数据集,我想在它上应用几个函数,同时将结果向前传递,如下所示:

val result: ResultSet = Functions.thread(inputSet)
.andThen(execute(_, executionContext))
.andThen(_.filter(_.nonEmpty))
.andThen(verifyData(_, verificationHelper))
.andThen(_.cache)
.andThen(saveSnapshot)

要在没有线程的情况下编写相同的代码,您将需要嵌套调用或保存中间函数调用的结果。我更喜欢使用上面的方法,因为它用更少的行数就能完成相同的事情,从而提高了代码的可维护性和可读性。

这是实现此目的的 Functions实用程序:

object Functions {
def thread[T](item: T) = new ThreadFunctor(item)
}

class ThreadFunctor[T](val item: T) {
def andThen(f: T => T): ThreadFunctor[T] = new ThreadFunctor(f(item))
}

object ThreadFunctor {
implicit def threadToItem[T](thread: ThreadFunctor[T]): T = thread.item
}

关于scala - 与Clojure的线程宏等效的Scala是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19989825/

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