Scala: не удается поймать исключение, выброшенное в замыкание - PullRequest
8 голосов
/ 17 апреля 2010

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

Я определил следующее:

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

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

tryAndReport{
  someCodeThatThrowsMySpecificException()
}

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

Почему?

Спасибо!

Ответы [ 2 ]

12 голосов
/ 17 апреля 2010

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

6 голосов
/ 17 апреля 2010

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

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

def tryAndReport(block: () => Unit): Unit = {
  try { block() }
  catch { case e: MSE => dSU }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...