gpt4 book ai didi

scala - Martin Odersky 在线 scala 类(class)中的 Generator 中的 flatMap

转载 作者:行者123 更新时间:2023-12-02 03:30:17 25 4
gpt4 key购买 nike

目前正在学习在线类(class)《响应式编程原理》由 Martin Odersky、Erik Meijer、Roland Kuhn 编写,一年前就已经结束了,我想这门类(class)的讨论论坛中没有人活跃,所以我把我的问题放在这里寻求帮助,非常感谢。

在“Functional Random Generators”类(class)中,Martin 给出了一个带有 flatMap 方法的生成器实现,如下所示:

trait Generator[+T] {
self => // an alias for "this"

def generate: T

def map[S](f: T => S): Generator[S] = new Generator[S] {
def generate = f(self.generate)
}

def flatMap[S](f: T => Generator[S]): Generator[S] = new Generator[S] {
def generate = f(self.generate).generate
}
}

这里的flatMap我不是很清楚,它返回一个新的Generator[S],定义了generate方法,但是它的实现依赖于来自输入函数的“other”Generator[S]的“other”generate方法参数 f.

这是我的问题:

1)输入函数f的Generator[S]和这个flatMap方法返回的Generator[S]是同一种类型吗?

2) 如果它们相同,编译器如何解释生成方法,因为它是自己定义的?

最佳答案

我想我得到了答案

1) 来自输入函数 f 的 Generator[S] 和 flatMap 方法返回的 Generator[S] 是相同的“抽象”类型,但它们的实例可以有不同的子类型,因此“虚拟”生成方法是不同的.

2) 输入函数 f 返回的 Generator[S] 的生成方法必须已经在 flatMap 上下文中定义。它们是不同真实类型的不同生成方法。

关于scala - Martin Odersky 在线 scala 类(class)中的 Generator 中的 flatMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27333614/

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