Не, если Вы хотите поддержать траверсабельность списка. Необходимо обновить предыдущий узел для соединения со следующим.
, Как Вы закончили бы в этой ситуации, так или иначе? Что Вы пытаетесь сделать, который заставляет Вас задать этот вопрос?
>> require 'ostruct'
=> []
>> foo = {'bar'=>'baz'}
=> {"bar"=>"baz"}
>> foo_obj = OpenStruct.new foo
=> #<OpenStruct bar="baz">
>> foo_obj.bar
=> "baz"
>>
То, что вы ищете, называется OpenStruct . Это часть стандартной библиотеки.
Это лучшая из тех, что я когда-либо видел: «Перечисления первого класса в 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
выше.