Ich habe mit Strukturtypen von Scala herumgespielt, als ich einen Fehler entdeckt habe, der mir seltsam erscheint. Hier ist mein Code:
type toD = { def toDouble: Double }
def foo(t: toD) = t.toDouble
foo(5)
Und ich habe diesen Fehler erhalten:
java.lang.NoSuchMethodException
at scala.runtime.BoxesRunTime.toDouble(Unknown Source)
at .foo(:9)
at .(:11)
at .()
at .(:11)
at .()
at $print()
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:704)
at scala.tools.nsc.interpreter.IMain$Request$$anonfun$14.apply(IMain.scala:920)
at scala.tools.nsc.interpreter.Line$$anonfun$1.apply$mcV$sp(Line.scala:43)
at scala.tools.nsc.io.package$$anon$2.run(package.scala:25)
at java.lang.Thread.run(Unknown Source)
Zum einen weiß ich nicht, warum es nicht funktioniert. Zum anderen ist es seltsam, dass der Code einwandfrei kompiliert und zur Laufzeit eine Ausnahme wirft, die besagt, dass die Methode tatsächlich nicht existiert.
Hat jemand eine Erklärung dafür?