Отображение обозначения нескольких хеш-ключей
Допустим, у меня есть рубиновый хеш в стиле savon soap xml response to hash
hash1= { node1: {node2:{node3:1,node4:2}}}
теперь для отображения этого хэша
hash1[:node1][:node2][:node3]
работы и выводы => 1
hash1[:node1][:node2][:node4]
работает и выводится => 2
hash1[:node1][:node2][:node3][:node4]
дает TypeError
хотя я видел этот тип кода на скриптах Savon. Что не работает в моей ситуации?
2 ответа
hash1[:node1][:node2][:node3][:node4]
вызывает метод [] на
hash1[:node1][:node2][:node3]
,
Это эквивалент пытаться 1[:node4]
, Метод целого числа принимает Fixnum и не может неявно преобразовать символ (или строку и т. Д.) В целое число.
Эти множественные вложенные хэши трудно читать, не так ли? Давайте немного разберем ваш хеш:
hash1= {
node1: {
node2: { node3:1, node4:2 }
}
}
Итак: значение node1 само по себе является хешем. Единственная запись в этом хеше, node2, также имеет хеш для значения. Этот хэш имеет две записи: node3 и node4, каждая из которых имеет целые числа в качестве значений.
Так hash1[:node1][:node2]
возвращается {node3:1, node4:2}
, А также hash1[:node1][:node2][:node3]
возвращает 1.
Но hash1[:node1][:node2][:node3][:node4]
не имеет никакого смысла, потому что 1 не является хешем, и поэтому не имеет ключа :node4
, Этот ключ принадлежит :node2
хэш.
Это имело бы смысл, если бы вы имели hash1= { node1: {node2: {node3: {node4:2} }}}
, Но ты не.
Как я уже сказал: эти вложенные хеши - это боль для чтения...