在Scala中,“That”符号是什么意思?

5
我已经看到过多个使用泛型符号“That”的代码示例,例如:
def map[B, That](f : (A) => B) : That

但是,由于这个词不易于在谷歌上搜索,我找不到任何关于它的文档,也不知道如何使用它。
它只是一个普通的类型占位符,还是有特殊作用?

3
这是一个占位符 - 是的。 - michael_s
3个回答

13

[...]中的任何标识符都将作为类型参数处理。

因此,在def map[B, That](f : (A) => B) : That的情况下,That仅表示通用返回类型。例如,将其替换为Zdef map[B, Z](f : (A) => B) : Z将具有完全相同的效果。


3

翻译成Java代码,应该是这样的:

public <B, That> That map(f: Function1<A, B>)

换句话说,That 是一个通用类型(或者在 Scala 中称为类型参数)。

3

你所说的“占位符”实际上是类型参数,集合库中的约定是使用 That 来表示将要创建的集合类型。因此,你需要从 this 转换为 That


称其为“占位符”最多是误导性的。它是一个正式的类型参数,就像方法定义中的“常规”(值)参数名称一样是形式参数。它是方法参数的类型级对应物。 - Randall Schulz
@RandallSchulz - 的确如此,但这是原帖的称呼。我已经修改了我的答案,说明了它是什么,并建议“占位符”不是技术上正确的术语。 - Rex Kerr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接