抽象类型益智游戏

时间:2011-08-25 18:06:29

标签: scala abstract-type

鉴于课程A是:

class A {
  type R
}

为什么以下代码编译(并运行)?

val a = new A
println(a)

A不应该是抽象的吗?

3 个答案:

答案 0 :(得分:7)

A不是抽象的。如果它是抽象的,那么它看起来像:

abstract class A {
  type R
}

trait A {
  type R
}

现在,我在规范中找不到它(最近在那里找到东西并没有太多运气)但我以前见过这个。如果没有使用该类型,那么它似乎没有被评估,这意味着缺乏完整性不是问题。

如果您真的希望A是抽象的,请改为使用上述定义之一。

答案 1 :(得分:2)

请详细说明@ alex22的评论:

scala> trait T { type R; def foo(r: R) = r }
defined trait T

scala> new T{}.foo("")
<console>:12: error: type mismatch;
 found   : java.lang.String("")
 required: _6.R where val _6: java.lang.Object with T
              new T{}.foo("")
                          ^

scala> new T{ type R = String }.foo("")
res37: java.lang.String = ""

答案 2 :(得分:0)

抽象类型似乎有默认值Nothing