Ich habe den folgenden Code Wert auf die Art der Standard würfenScala gegossen auf eine Variable Typ
def fct[T](value: Any, default: T): T = {
val result = value.asInstanceOf[T]
println(result, result.getClass.getName, result.isInstanceOf[T])
result
}
val res = fct("foo", 42)
Welches Ergebnis ist:
(foo,java.lang.String,true)
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at scala.runtime.BoxesRunTime.unboxToInt(Test.sc2.tmp)
at #worksheet#.res$lzycompute(Test.sc2.tmp:7)
at #worksheet#.res(Test.sc2.tmp:7)
at #worksheet#.#worksheet#(Test.sc2.tmp:7)
Frage ist: warum die PrintIn wird angezeigt? Die Besetzung sollte fehlschlagen. Ich habe versucht, die 3 Zeilen zu versuchen, aber keine Ausnahme wird während des Funktionsaufrufs ausgelöst.
Das ist komisch. Beachten Sie, dass ich ein Ergebnis von '(Some (foo), scala.Some, true)' aus Ihrem Code erhalte. – Yawar
Ja sorry, ich korrigiere das – Benjamin
Das ist in der Tat seltsam. Und ich bekomme '(foo, java.lang.String, true)' auf der Scala 2.11.8 Konsole. Der Funktionskörper wird irgendwie träge ausgeführt. Was ist seltsam. –