Я был бы рад получить доступ к любому элементу многомерного хеш-массива с помощью более короткого выражения
h = {a: {b: 'c'}}
# default way
p h[:a][:b] # => "c"
# a nicer way
p h[:a,:b] # => "c"
# nice assignment
h[:a,:b] = 1
p h # => {:a=>{:b=>1}}
Я понимаю, что таким образом исключается возможность иметь хеш-ключ в виде массива.
{[:a,:b] => "c"}
Поскольку это довольно редкая ситуация, я бы предпочел уменьшить число [] в моих выражениях.
Как этого добиться?
Обновление
Хорошо, я не был ясен. Проблема в том, что я сам пытался создать пользовательские методы []
и []=
, но не смог. Не могли бы вы показать мне, как такая функциональность может быть реализована?
Многомерные массивы
Если вы ищете что-то похожее для массивов, взгляните на narray
gem http://narray.rubyforge.org/
>> a = NArray.int(5,5)
=> NArrayint5,5:
[ [ 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0 ] ]
>> a[1,2]
=> 0
>> a[1,2]=1
=> 1
>> a
=> NArrayint5,5:
[ [ 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0 ],
[ 0, 1, 0, 0, 0 ],
[ 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0 ] ]
>> a[1,0..4]=1
=> 1
>> a
=> NArrayint5,5:
[ [ 0, 1, 0, 0, 0 ],
[ 0, 1, 0, 0, 0 ],
[ 0, 1, 0, 0, 0 ],
[ 0, 1, 0, 0, 0 ],
[ 0, 1, 0, 0, 0 ] ]