我见过几个使用Generics符号“That”的代码示例。即
def map[B, That](f : (A) => B) : That
但是,由于缺乏谷歌这个词的能力,我找不到任何关于它做什么或如何使用它的文档。
它只是一个普通的类型占位符,还是它做了一些特别的事情?
答案 0 :(得分:13)
[...]
内的任何标识符都被视为类型参数。
因此,def map[B, That](f : (A) => B) : That
That
只表示泛型返回类型。将其替换为Z
,例如:def map[B, Z](f : (A) => B) : Z
具有完全相同的效果。
答案 1 :(得分:3)
转换为Java,即:
public <B, That> That map(f: Function1<A, B>)
或者,换句话说,That
是通用的(或者,在Scala术语中,是一个类型参数)。
答案 2 :(得分:3)
当你调用它时,它是一个“占位符”(即一个类型参数);集合库中的约定是使用That
来表示将要创建的集合的类型。 (因此,您从this
转换为That
。)