Для чего нужны пустые одинарные кавычки после спасения? - PullRequest
0 голосов
/ 02 мая 2020
 while t = Integer(gets.chomp) rescue ''
   if t.is_a? Integer
    break
   else
    print "Please enter a whole number "
   end
  end 

Я просто пытаюсь выяснить, почему мне нужны эти пустые одинарные кавычки после спасения, чтобы этот l oop работал.

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Это называется встроенным rescue. Если t = Integer(gets.chomp) вызывает любое исключение, унаследованное от StandardError, оно будет спасено, и вместо него будет возвращена пустая строка. Вы можете думать об этом так:

begin
  do_something
rescue
  ''
end

Проблема с этим подходом заключается в том, что вы не можете указать классы исключений для восстановления, поэтому вы можете случайно замаскировать ошибки, которые вы не ожидали, например, NoMethodError повышается при опечатке chomp метод:

Integer(gets.chmp) rescue ''
#=> ""
0 голосов
/ 02 мая 2020

потому что Integer (gets.chomp) может вызвать исключение, которое перехватывается спасением и присваивать t значение как пустую строку

...