У меня есть следующий код, чтобы бросить значение к типу умолчанию:Scala приведен к типу переменной
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)
Какой результат является:
(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)
Вопрос: почему println отображается? Бросок должен потерпеть неудачу. Я попытался попробовать/поймать 3 строки, но во время вызова функции не возникает никаких исключений.
Это странно. Обратите внимание, что я получаю результат '(Some (foo), scala.Some, true)' из вашего кода. – Yawar
Да, извините, я исправлю это – Benjamin
Это странно. И я получаю '(foo, java.lang.String, true)' на консоли Scala 2.11.8. Тело функции как-то лениво выполнено. Что странно. –