Структурные типы и примитивы

Я играл со структурными типами Scala, когда обнаружил то, что мне кажется ошибкой. Вот мой код:

type toD = { def toDouble: Double }
def foo(t: toD) = t.toDouble
foo(5)

И я получил эту ошибку:

java.lang.NoSuchMethodException
at scala.runtime.BoxesRunTime.toDouble(Unknown Source)
at .foo(<console>:9)
at .<init>(<console>:11)
at .<clinit>(<console>)
at .<init>(<console>:11)
at .<clinit>(<console>)
at $print(<console>)
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)

Во-первых, я не знаю, почему это не работает. Во-вторых, странно, что код прекрасно компилируется и выдает исключение во время выполнения, говорящее о том, что метод на самом деле не существует.

Есть ли у кого-нибудь объяснение этому?

5
задан Luigi a.k.a. Rhys 6 April 2012 в 11:07
поделиться