Estaba jugando con los tipos estructurales de Scala cuando descubrí lo que parece un error para mí. Aquí está mi código:Tipos estructurales y primitivas
type toD = { def toDouble: Double }
def foo(t: toD) = t.toDouble
foo(5)
Y tengo este error:
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)
En primer lugar, no sé por qué esto no está funcionando. En segundo lugar, es extraño que el código compila muy bien y arroja una excepción en el tiempo de ejecución, diciendo que el método no existe en realidad.
¿Alguien tiene una explicación para esto?
Tenga en cuenta que este ejemplo funciona en Scala versión 2.10 de desarrollo . Pero eso no significa que toda el área desordenada de tipos estructurales y primitivas en caja esté completamente desinfectada. – Debilski
Otra solución desordenada: 'foo (5.asInstanceOf [toD])' funciona. – Jus12