显示多个哈希键表示法

时间:2015-07-01 18:31:50

标签: ruby hash savon notation

让我说我有一个红宝石哈希风格的savon soap xml对哈希的反应

   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 个答案:

答案 0 :(得分:2)

hash1[:nod­e1][:node2­][:node3][:node4]正在调用

上的方法[]

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

相当于尝试1[:node4]。整数上的方法采用Fixnum,不能将符号(或字符串等)隐式转换为整数。

答案 1 :(得分:0)

这些多重嵌套的哈希很难读懂,不是吗?让我们散布一下你的哈希:

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} }}­} 会有意义。但你没有。

就像我说的那样:这些嵌套的哈希值很难读......