хеш ['ключ'] к hash.key в Ruby

Не, если Вы хотите поддержать траверсабельность списка. Необходимо обновить предыдущий узел для соединения со следующим.

, Как Вы закончили бы в этой ситуации, так или иначе? Что Вы пытаетесь сделать, который заставляет Вас задать этот вопрос?

45
задан grace 21 August 2012 в 08:02
поделиться

3 ответа

>> require 'ostruct'
=> []
>> foo = {'bar'=>'baz'}
=> {"bar"=>"baz"}
>> foo_obj = OpenStruct.new foo
=> #<OpenStruct bar="baz">
>> foo_obj.bar
=> "baz"
>>
81
ответ дан 26 November 2019 в 20:51
поделиться

То, что вы ищете, называется OpenStruct . Это часть стандартной библиотеки.

35
ответ дан 26 November 2019 в 20:51
поделиться

Это лучшая из тех, что я когда-либо видел: «Перечисления первого класса в Python»

http: //code.activestate. com / recipes / 413486 /

Он дает вам класс, и этот класс содержит все перечисления. Перечисления можно сравнивать друг с другом, но они не имеют особого значения; вы не можете использовать их как целые числа. (Сначала я сопротивлялся этому, потому что я привык к перечислениям C, которые являются целочисленными значениями. Но если вы не можете использовать его как целое число, вы не можете использовать его как целое число по ошибке, поэтому в целом я думаю, что это победа .) Каждое перечисление - уникальное значение. Вы можете печатать перечисления, вы можете перебирать их, вы можете проверить, находится ли значение перечисления «в» перечислении. Это довольно полно и гладко.

Edit (cfi): Вышеупомянутая ссылка не совместима с Python 3. Вот мой порт перечисления.

a={'foo'=>5, 'goo'=>6}
def a.method_missing(n)
   self[n.to_s]
end

Другое наблюдение: когда method_missing вызывается системой, он дает вам аргумент Symbol . Мой код преобразовал его в String . Если ваши хеш-ключи не являются строками, этот код никогда не вернет эти значения - если вы вводите символы вместо строк, просто замените n на n.to_s выше.

6
ответ дан 26 November 2019 в 20:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: