среда, 5 декабря 2007 г.

Improved hash accessor

Ruby разрешает получить доступ только к одному значению хеша через []. К счастью, это легко исправить:

#extensions.rb

class Hash
alias value_by_index []
def [](*keys)
case (values = keys.map { |key| value_by_index key }).size
when 1 then values.first
when 0 then nil
else values end
end
end

Примеры,
require 'extensions'

hash = { :a => 1, :b => 2 }
p hash[:a, :b] # => [1, 2]
p hash[:a] # => 1
p hash[:d] # => nil