假设我有一个savon soap风格的ruby散列xml对散列的响应
hash1= { node1: {node2:{node3:1,node4:2}}}
现在显示这个散列
hash1[:node1][:node2][:node3]
工作和输出=>1
hash1[:node1][:node2][:node4]
工作和输出=>2
hash1[:node1][:node2][:node3][:node4]
给出TypeError
尽管我在savon脚本上见过这种类型的代码。在我的情况下,什么不管用?
hash1[:node1][:node2][:node3][:node4]
正在上调用方法[]
CCD_ 2。
这相当于尝试1[:node4]
。整数上的方法采用Fixnum,不能将符号(或字符串等)隐式转换为整数。
这些多重嵌套的哈希很难阅读,不是吗?让我们把你的杂烩散开来:
hash1= {
node1: {
node2: { node3:1, node4:2 }
}
}
所以:node1的值本身就是一个散列。该散列中唯一的条目node2也有一个值的散列。这个散列有两个条目:node3和node4,这两个条目的值都是整数。
因此hash1[:node1][:node2]
返回{node3:1, node4:2}
。并且CCD_ 6返回1。
但是hash1[:node1][:node2][:node3][:node4]
没有任何意义,因为1不是散列,因此没有密钥:node4
。该密钥属于:node2
哈希。
如果您有hash1= { node1: {node2: {node3: {node4:2} }}}
,那么将是有意义的。但你没有。
就像我说的:这些嵌套的散列读起来很痛苦。。。