gpt4 book ai didi

api - Scala API 2.10.* : Function2. 然后发生了什么?

转载 作者:行者123 更新时间:2023-12-04 12:22:07 28 4
gpt4 key购买 nike

我正在阅读 Joshua Suereth 的 «Scala in Depth»,这本书是我为了作者明确确立的能力而购买的。我在第 3 页,在经历了一堆拼写错误和不连贯的格式之后(好吧,我已经可以容忍这些错误了),我偶然发现了以下关于解决一个非常简单场景的函数式方法的示例。

trait Cat
trait Bird
trait Catch
trait FullTummy

def catch(hunter: Cat, prey: Bird): Cat with Catch
def eat(consumer: Cat with Catch): Cat with FullTummy

val story = (catch _) andThen (eat _)
story(new Cat, new Bird)

我谨慎地举了这个例子,前提是它显然是一个蓝图(没有定义具体的方法......)...... «catch» 显然是另一个错字,只要它是一个保留字...... CatBird不可实例化…

……但是,尽管示例的质量很差,但我不能认为根据函数组合定义的 «story» val( andThencompose 的“反向关联”)是另一个意外错误,前提是它是例子的核心。

实际上,该示例无法在我的本地 Scala 版本 (2.10.1) 上编译,并且在可用的最新版本 (2.10.2) 中也没有记录。

毫无疑问它的用处和它的实现很容易实现(如下):
trait Function2ex[-T1, -T2, +R] extends Function2[T1, T2, R] {
def andThen[A](g: R => A): (T1, T2) => A = { (x, y) => g(apply(x, y)) }
}

在对 API 进行了简短的审查后,我发现 andThen仅由 Function1 支持,据说从 Function2 消失到 Function22 所以,问题是:

当前支持什么成语andThencompose具有大于 1 的函数*?

最佳答案

我根本不明白这个例子的去向,但这里有一些在 Scala 2.10.2 中编译的代码。

trait Cat
trait Bird
trait Catch
trait FullTummy

def `catch`(hunter: Cat, prey: Bird): Cat with Catch = ???
def eat(consumer: Cat with Catch): Cat with FullTummy = ???

val story = (`catch` _).tupled andThen (eat _)
story(new Cat with Catch, new Bird {})

我不得不引用 catch因为它是一个保留字,并将 Function2 元组化.

关于api - Scala API 2.10.* : Function2. 然后发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18038321/

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