首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在线scala课程中的flatMap

在线scala课程中的flatMap
EN

Stack Overflow用户
提问于 2014-12-06 16:14:34
回答 1查看 258关注 0票数 3

目前我正在学习马丁·奥德斯基( Martin Odersky )、埃里克·梅耶尔( Erik Meijer )、罗兰·库恩( Roland Kuhn )的在线课程“反应性编程原理”( Reactive of ),该课程一年前就已经结束了。我想在这个课程的讨论论坛上没有人活跃,所以我在这里提出我的问题,非常感谢。

在“函数随机生成器”会话中,Martin给出了用flatMap方法实现生成器的方法,如下所示:

代码语言:javascript
复制
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)如果它们是相同的,那么编译器如何解释生成方法,因为它是由自己定义的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-06 19:26:17

我想我知道答案了

1)输入函数f的GeneratorS和flatMap方法返回的GeneratorS具有相同的“抽象”类型,但它们的实例可能有不同的子类型,因此“虚拟”生成方法是不同的。

2)由输入函数f返回的GeneratorS生成方法必须已经在flatMap上下文中定义。它们是来自不同实际类型的不同的生成方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27333614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档