スカラ型Nothing
は(私が理解するように)タイプ階層の下を表し、記号⊥で示されています。つまり、Nothing
は任意のタイプのサブタイプです。 Nothing
タイプの要件は、タイプ理論の理論的背景なしに私たちのもののためにexplained well by James Iryです!Nothing型がクラス階層の最下部にある場合、なぜそれに対して考えられるメソッドを呼び出せないのですか?
Nothing
がすべてのタイプのサブタイプである場合、どうしてタイプのメソッドをNothing
で呼び出せないのですか?明らかに、私はNothingをインスタンス化することはできませんが、なぜ以下のコンパイルはできませんか? Nothing
として確か
var n: Nothing = _
def main(args: Array[String]) {
println(n.length) //compile error: value length is not a member of Nothing
}
はString
のサブタイプが、これはOKである必要がありますか?次のコンパイルはちょうど良いことに注意してください!
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)
}
もう1つのことは、 'n.length'では、あなたが話している' length'メソッドをScalaが知る方法がないことです。あなたは、引数がまたは 'this'引数)は正しい型を持ちます。 'foo(n)'ではどちらが既に明らかですか。 – Owen