Comments 16
Как простецкая бд мне нравится kirbybase
0
О конструкции
begin
полезно расказать в полной мере:begin Ух! мы тут такого сейчас понаделаем ! rescue MySiimpleError => e ошибка вроде простая, сейчас мы её пофиксим и будем щастливы retry if пофиксилась rescue MyUrecoverbleError => e ууупс! puts "У нас серьезные неприятности " + e.message + "\n" + e.backtrace else итак, ошибок нет, и кое что еще осталось сделать ensure а вот кое-что нужно полюбому сделать (есть исключения или нет), например, закрыть все открытые соединения end
+3
Ну вообще ensure в Ruby имеет отношение по большей мере не к rescue, а к блоку begin. Потому что «выполнить по-любасу» можно и просто помещением кода после end. А вот ensure служит для того, чтобы выполнить даже при return.
yehudakatz.com/2010/02/07/the-building-blocks-of-ruby/
yehudakatz.com/2010/02/07/the-building-blocks-of-ruby/
0
Да, именно так
И как праивльно замечено, если что-то хочется выполнить по-любасу, нужно помещать код в блок ensure.
А то, что помещено после end может не выполнится, если в begin или rescue будет выполнен оператор return
Закрыть открытые сокеты — один из важных юзкейсов
И как праивльно замечено, если что-то хочется выполнить по-любасу, нужно помещать код в блок ensure.
А то, что помещено после end может не выполнится, если в begin или rescue будет выполнен оператор return
Закрыть открытые сокеты — один из важных юзкейсов
$ cat a.rb
def foo(x)
begin
return 1 / x
rescue
return 1 / (x + 1)
ensure
puts "Hi #{x}"
end
end
puts foo(1)
puts foo(0)
$ ruby a.rb
Hi 1
1
Hi 0
1
0
имхо лучше и проще использовать для примитивного сохранения данных формат YAML
+2
Спасибо, что напомнили — мы уже говорили о маршалинге, надо будет показать и емл
0
[x] Покорми Ruby! Покорми Ruby, сучечке!
-7
Ruby один из красивейших языков программирования.
+6
Спасибо. Только не хватает ссылочек на все «капли» :)
0
У меня идея. Может выпустите книгу из этих каплей, чтобы легко было читать.
0
Еще по синтаксису исключений.
Если нужно обернуть весь метод целиком, begin можно отбросить — получаем
То же самое относится и к классам: если нужно ловить исключения, например, из этой вашей метапрограммерской магии, можно написать
Еще есть вот такой полезный список тонкостей работы raise/rescue/ensure/else: www.davidflanagan.com/2007/03/ruby-exceptionhandling-quiz.html
Если нужно обернуть весь метод целиком, begin можно отбросить — получаем
def f
...
rescue
...
end
То же самое относится и к классам: если нужно ловить исключения, например, из этой вашей метапрограммерской магии, можно написать
class C
...
rescue
...
end
Еще есть вот такой полезный список тонкостей работы raise/rescue/ensure/else: www.davidflanagan.com/2007/03/ruby-exceptionhandling-quiz.html
+1
Sign up to leave a comment.
Покорим Ruby вместе! Капля одиннадцатая