gpt4 book ai didi

scala - 如何将值用作目标函数的参数

转载 作者:行者123 更新时间:2023-12-03 21:28:06 24 4
gpt4 key购买 nike

我知道这可能会在某处得到解答,但我什至没有正确的术语来搜索它。如果在流程中的某个时刻我需要将当前结果用作函数的参数,我如何才能将函数组合在一起?

想象一下这个简单的情况:

Seq(1, 2, 3).map(_ * 2)
.map(doSomethingElseToEachValue(_))
.useAsParameterIn(functionThatTakesTheWholeSequence(_))

当然,它可以简单地通过将中间结果分配给一个 val 并使用它来完成:

val intermeditateSeq = Seq(1, 2, 3)
.map(_ * 2)
.map(doSomethingElseToEachValue(_))
functionThatTakesTheWholeSequence(intermediateSeq)

或者通过将函数包装在整个事物周围,但它会导致可读性非常差,因为执行流程在您阅读时会来回切换。如果您将多个这些操作交织在一起,它也会变得一团糟。

当我需要将整个对象用作参数而不仅仅是映射其内容时,如何保持从左到右、自上而下的逻辑流?

最佳答案

您可以做的第一件事就是匹配:

Seq(1, 2, 3)
.map(_ * 2)
.map(doSomethingElseToEachValue) match {
case xs => functionThatTakesTheWholeSequence(xs)
}

Scala 2.13 还为 pipe 带来了新的更好的可能性:

Seq(1, 2, 3)
.map(_ * 2)
.map(doSomethingElseToEachValue)
.pipe(functionThatTakesTheWholeSequence)

实际上编写pipe非常简单,所以如果你不能使用2.13但你想使用pipe,只需从2.13 source code复制扩展函数:

implicit class ChainingOps[A](private val self: A) extends AnyVal {
def pipe[B](f: A => B): B = f(self)
}

关于scala - 如何将值用作目标函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56132855/

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