Использование наличия / отсутствия ошибок в качестве условий с if / elsif / else в Ruby - PullRequest
0 голосов
/ 12 сентября 2009

Что такое Руби для следующего?

if executing the next line wouldn't cause any kind of error then
  execute this line
elsif executing the next line wouldn't cause any kind of error then
  execute this line
else

Я читал страницы API для спасения, исключений и eval, но до сих пор потерпел неудачу в моем квесте.

Большое спасибо,

Стивен.


Исходя из комментария от Ассафа Аркина, я собираюсь предложить следующий синтаксис:

if first_condition
 execute_this_line rescue nil
elsif second_condition
 execute_that_line rescue nil
end

Будет ли результат следующим образом?

Если first_condition верно и это можно выполнить без этой строки ошибка, тогда она будет выполнена_this_line.

Если first_condition верно и execute_this_line обычно генерирует ошибка, она перейдет к концу.

Если первое условие ложно, оно будет test second_condition.

Если second_condition верно и это возможно выполнить ошибка, то он будет выполнять _that_line.

В противном случае он будет прыгать до конца.

Ответы [ 2 ]

1 голос
/ 12 сентября 2009

На самом деле, я думаю, что мне нужно:

if first_condition rescue nil
 execute_this_line
elsif second_condition rescue nil
 execute_that_line
end

Будет ли результат следующим образом?

Если first_condition имеет значение true, тогда оно будет выполнено_this_line.

Если first_condition имеет значение false или генерирует ошибку, он перейдет к second_condition без действия, выдающего ошибку.

и т.д ...

1 голос
/ 12 сентября 2009

Я переименую ваш псевдокод, чтобы уточнить:

if lineA doesn't cause an error
  execute lineA
elsif lineB doesn't cause an error
  execute lineB
end

Это правильно, как вы хотели? Тогда почему бы не использовать

begin
  lineA
rescue
  error_handling
ensure
  lineB
end

Если вы хотите сделать больше этого, вы можете вложить его, и, конечно, это хорошая идея, чтобы изменить некоторые новые методы из него.

Альтернативно сокращение:

valA = lineA rescue StandardError
lineB if valA.is_a?(Exception)

И, конечно, вы можете повторять это столько раз, сколько захотите! ;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...