Ruby/Избранное с RubyNews: различия между версиями
Содержимое удалено Содержимое добавлено
Строка 69:
Когда один из моих студентов занимался разработкой калькулятора на Ruby, то он столкнулся с одной интересной особенностью метода <code>eval</code>. В случае синтаксической ошибки в строке, переданой <code>eval</code> в качестве параметра, программа вылетала с ошибкой <code>SyntaxError</code>. Ниже идет пример, который демонстрирует эту ситуацию:
eval('2+2+') ▼
p "error" ▼
end</code>▼
Для контроля за ситуацией надо явно указать ошибку, которую вы хотите контролировать (в нашем случае <code>SyntaxError</code>). ▼
eval('2+2+')
p "error"
▲Для контроля за ситуацией надо явно указать ошибку, которую вы хотите контролировать (в нашем случае <code>SyntaxError</code>).
<source lang=ruby>begin
rescue SyntaxError
Теперь все работает! Осталось только заметить, что если строка приходит из внешнего источника, то желательно ее предварительно проверить на соответствие вашим ожиданием. Иначе, вы будете кормить хакеров... :-) Как пояснил Yuri Leikind, этот эффект связан с тем, что rescue без параметра отлавливает ошибки выполнения программы (<code>Runtime Error</code>), а приведенный выше пример вызывает исключение (<code>Exception</code>). В общем, проблема все равно решается так, как я описал выше. :-)
|