вторник, 1 сентября 2009 г.

Синтаксическая глазурь для возвращаемого значенияс в Ruby

Мне всегда нравился Ruby своим "человеко подобным" синтаксисом.
Но была одна вещь, которую пальцы всегда отказывались писать.
Это код вида

def ugly
results = {}

[:x, :y, :z].each do |letter|
results[letter] = rand(100)
end

results
end



Не по-рубически это как то :).
Оказывается DHH о нас позаботился и в active support есть такая приятная штучка returning.

def sexy
returning({}) do |results|
[:x, :y, :z].each do |letter|
results[letter] = rand(100)
end
end
end


Другого названия кроме как секси и не подберешь :)
Да, и не пытайтесь это использовать не с ссылочными типами - ничего не выйдет.
Ибо выглядит returrning следующим образом

# File vendor/rails/activesupport/
#lib/active_support/core_ext/object/misc.rb, line 27
def returning(value)
yield(value)
value
end

Комментариев нет:

Отправить комментарий