Отображение обозначения нескольких хеш-ключей

Допустим, у меня есть рубиновый хеш в стиле savon soap xml response to hash

   hash1= { node1­: {node­2:{node3:1­,node4:2}}­}

теперь для отображения этого хэша

hash1[:nod­e1][:node2­][:node3]

работы и выводы => 1

hash1[:nod­e1][:node2­][:node4]

работает и выводится => 2

hash1[:nod­e1][:node2­][:node3][:node4]

дает TypeError

хотя я видел этот тип кода на скриптах Savon. Что не работает в моей ситуации?

2 ответа

hash1[:nod­e1][:node2­][:node3][:node4] вызывает метод [] на

hash1[:nod­e1][:node2­][:node3],

Это эквивалент пытаться 1[:node4], Метод целого числа принимает Fixnum и не может неявно преобразовать символ (или строку и т. Д.) В целое число.

Эти множественные вложенные хэши трудно читать, не так ли? Давайте немного разберем ваш хеш:

hash1= { 
  node1­: {
    node­2: { 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­: {node­2: {node3: {node4:2} }}­}, Но ты не.

Как я уже сказал: эти вложенные хеши - это боль для чтения...

Другие вопросы по тегам