我在课程上开始了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
?
答案 0 :(得分:1)
[S]
之后的map
是类型参数,并使其成为所谓的polymorphic method。在上面的示例中,如果您编写了相同的def map
但没有[S]
,则编译器将无法在剩余的方法定义中遇到S
时遇到的问题。因此[S]
使编译器知道标识符S
,并将其置于报告拼写错误的位置。
例如,假设您不小心写了f: T => Floot
而不是f: T => Float
的新方法。你想要的是编译器抱怨Floot
是一个未知的标识符。你不希望它默默地假设Floot
是某种类型的参数。