Scala: не Может поймать исключение, выданное в закрытии

Отказ от ответственности: абсолютный новичок в Scala :(

У меня есть определенное следующее:

def tryAndReport(body: Unit) : Unit = {
  try {
    body
  } catch {
    case e: MySpecificException => doSomethingUseful
  }
}

Я называю его как это:

tryAndReport{
  someCodeThatThrowsMySpecificException()
}

В то время как вызов к someCodeThatThrowsMySpecificException происходит очень хорошо, исключение не поймано в tryAndReport.

Почему?

Спасибо!

8
задан Dmitriy 17 April 2010 в 03:01
поделиться

2 ответа

Попробуйте изменить тело с Unit на => Unit . Теперь, как он определен, он считает body блоком кода для оценки в Unit . При использовании вызова по имени он будет выполнен в попытке , как определено, и должен быть обнаружен .

12
ответ дан 5 December 2019 в 09:24
поделиться

Тело в вашем методе tryAndReport не является закрытием или блоком, это значение (типа Unit ]).

Я не рекомендую использовать аргумент по имени, а скорее явную функцию.

def tryAndReport(block: () => Unit): Unit = {
  try { block() }
  catch { case e: MSE => dSU }
}
6
ответ дан 5 December 2019 в 09:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: