ScalaタイプNothing
は、(私が理解しているように)タイプ階層の最下部を表し、記号⊥でも示されます。つまりNothing
、任意のタイプのサブタイプです。型の要件は、Nothing
型理論の理論的背景がない私たちのために、James Iryによってよく説明されています!
だから私の質問は、Nothing
がすべてのタイプのサブタイプである場合、なぜどのタイプのメソッドも呼び出せないのNothing
ですか?明らかに、私は何もインスタンス化できませんが、なぜ次のコンパイルが行われないのですか?
var n: Nothing = _
def main(args: Array[String]) {
println(n.length) //compile error: value length is not a member of Nothing
}
確かにNothing
、これのサブタイプはString
大丈夫ですか?以下は問題なくコンパイルされることに注意してください!
var n: Nothing = _
def foo(s: String) : Int = s.length
def main(args: Array[String]) {
println(foo(n))
}
のように:
def main(args: Array[String]) {
println(n.asInstanceOf[String].length)
}