Отказ от ответственности: абсолютный новичок в Scala :(
У меня есть определенное следующее:
def tryAndReport(body: Unit) : Unit = {
try {
body
} catch {
case e: MySpecificException => doSomethingUseful
}
}
Я называю его как это:
tryAndReport{
someCodeThatThrowsMySpecificException()
}
В то время как вызов к someCodeThatThrowsMySpecificException происходит очень хорошо, исключение не поймано в tryAndReport.
Почему?
Спасибо!
Попробуйте изменить тело с Unit
на => Unit
. Теперь, как он определен, он считает body
блоком кода для оценки в Unit
. При использовании вызова по имени он будет выполнен в попытке
, как определено, и должен быть обнаружен .
Тело
в вашем методе tryAndReport
не является закрытием или блоком, это значение (типа Unit
]).
Я не рекомендую использовать аргумент по имени, а скорее явную функцию.
def tryAndReport(block: () => Unit): Unit = {
try { block() }
catch { case e: MSE => dSU }
}