Pull to refresh

Comments 16

Как простецкая бд мне нравится kirbybase
О конструкции begin полезно расказать в полной мере:
begin
  Ух!  мы тут 
  такого сейчас понаделаем !
rescue MySiimpleError => e
  ошибка вроде простая, 
  сейчас  мы её пофиксим и будем щастливы
  retry if пофиксилась
rescue MyUrecoverbleError => e
  ууупс!
  puts "У нас серьезные неприятности " + e.message + "\n" + e.backtrace
else 
  итак, ошибок нет, и кое что еще осталось 
  сделать
ensure
  а вот кое-что нужно полюбому сделать (есть исключения или нет),
  например, закрыть все открытые соединения
end
Ну вообще ensure в Ruby имеет отношение по большей мере не к rescue, а к блоку begin. Потому что «выполнить по-любасу» можно и просто помещением кода после end. А вот ensure служит для того, чтобы выполнить даже при return.
yehudakatz.com/2010/02/07/the-building-blocks-of-ruby/
Да, именно так

И как праивльно замечено, если что-то хочется выполнить по-любасу, нужно помещать код в блок 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
имхо лучше и проще использовать для примитивного сохранения данных формат YAML
Спасибо, что напомнили — мы уже говорили о маршалинге, надо будет показать и емл
вообще думаю язык разметки YAML заслуживает отдельной статьи с примерами использования в разных языкак, так как это отличный способ сохранения конфигов и других структурированных данных, о котором мало кто знает
К сожалению о других языках — это не ко мне :( О Руби расскажу, конечно
Ruby один из красивейших языков программирования.
Спасибо. Только не хватает ссылочек на все «капли» :)
Там справа, в Похожих публикациях есть, а вообще все капли в блоге
У меня идея. Может выпустите книгу из этих каплей, чтобы легко было читать.

Еще по синтаксису исключений.
Если нужно обернуть весь метод целиком, begin можно отбросить — получаем
def f
...
rescue
...
end


То же самое относится и к классам: если нужно ловить исключения, например, из этой вашей метапрограммерской магии, можно написать
class C
...
rescue
...
end


Еще есть вот такой полезный список тонкостей работы raise/rescue/ensure/else: www.davidflanagan.com/2007/03/ruby-exceptionhandling-quiz.html
На счет CSV.
Стандартный рубовский CSV очень медленый, в качестве замены рекомендую использовать ccsv.
Я писал про него на Хабре
Sign up to leave a comment.

Articles