试图理解最小上界示例

时间:2015-06-15 15:27:05

标签: scala

给出以下特征和2个子类:

scala> trait Parent
defined trait Parent

scala> case object Kid extends Parent
defined object Kid

scala> case object Child extends Parent
defined object Child

我创建了一个返回KidChild的函数。但推断的返回类型是Product with Serializable with Parent

scala> def f(x: Int) = if (true) Kid else Child
f: (x: Int)Product with Serializable with Parent

然后,我重写了相同的函数,除了我明确地注释它的类型:

scala> def g(x: Int): Parent = if (true) Kid else Child
g: (x: Int)Parent

请解释f的推断类型。

1 个答案:

答案 0 :(得分:5)

Case对象总是从ProductSerializable继承(这由编译器透明地完成)。

此外,KidChild显式扩展Parent

因此KidChild都是Product with Serializable with Parent的子类型。 因为它们没有其他常见类型,所以这是它们的最小上限。