Одна вещь, которую я люблю в рубине, состоит в том, что в основном это очень читаемый язык (что отлично подходит для самодокументирующего кода)
Однако, вдохновленный этим вопросом: объяснил Ruby Code
и описание того, как ||=
работает в рубине, я думал о рубиновых идиомах, которые я не использую, так как, честно говоря, я не полностью их понимаю.
Итак, мой вопрос, аналогичный примеру из упомянутого вопроса, какие общие, но не очевидные, рубиновые идиомы, мне нужно знать, чтобы быть действительно опытным рубиновым программистом?
Кстати, из упомянутого вопроса
a ||= b
эквивалентно
if a == nil || a == false
a = b
end
(Спасибо Ян Террелл за исправление)
Изменить: Оказывается, этот момент не является абсолютно бесспорным. На самом деле правильное расширение
(a || (a = (b)))
Посмотрите эти ссылки, почему:
- http://DABlog.RubyPAL.Com/2008/3/25/a-short-circuit-edge-case/
- http://DABlog.RubyPAL.Com/2008/3/26/short-circuit-post-correction/
- http://ProcNew.Com/ruby-short-circuit-edge-case-response.html
Благодаря Jörg W Mittag для указания этого.