目前我正在学习马丁·奥德斯基( Martin Odersky )、埃里克·梅耶尔( Erik Meijer )、罗兰·库恩( Roland Kuhn )的在线课程“反应性编程原理”( Reactive of ),该课程一年前就已经结束了。我想在这个课程的讨论论坛上没有人活跃,所以我在这里提出我的问题,非常感谢。
在“函数随机生成器”会话中,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不是很清楚,它用定义的generate方法返回一个新的GeneratorS,但是它的实现依赖于输入函数f中的“其他”GeneratorS的“其他”生成方法。
以下是我的问题:
( 1)输入函数f返回的GeneratorS与flatMap方法返回的GeneratorS是否为同一类型?
2)如果它们是相同的,那么编译器如何解释生成方法,因为它是由自己定义的?
发布于 2014-12-06 19:26:17
我想我知道答案了
1)输入函数f的GeneratorS和flatMap方法返回的GeneratorS具有相同的“抽象”类型,但它们的实例可能有不同的子类型,因此“虚拟”生成方法是不同的。
2)由输入函数f返回的GeneratorS生成方法必须已经在flatMap上下文中定义。它们是来自不同实际类型的不同的生成方法。
https://stackoverflow.com/questions/27333614
复制相似问题