Scala语法,我不明白

时间:2015-06-04 14:43:52

标签: scala

我在课程上开始了scala课程,但我在这里得不到一件事:

trait Generator[+T] {
  self => // do this to be able to use self instead of this

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

为什么我们在函数定义中使用map[S]而不只是map

1 个答案:

答案 0 :(得分:1)

[S]之后的map类型参数,并使其成为所谓的polymorphic method。在上面的示例中,如果您编写了相同的def map但没有[S],则编译器将无法在剩余的方法定义中遇到S时遇到的问题。因此[S]使编译器知道标识符S,并将其置于报告拼写错误的位置。

例如,假设您不小心写了f: T => Floot而不是f: T => Float的新方法。你想要的是编译器抱怨Floot是一个未知的标识符。你不希望它默默地假设Floot是某种类型的参数。