让我说我有一个红宝石哈希风格的savon soap 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脚本上看到过这种类型的代码。在我的情况下它有什么作用?
答案 0 :(得分:2)
hash1[:node1][:node2][:node3][:node4]
正在调用
hash1[:node1][:node2][:node3]
。
相当于尝试1[:node4]
。整数上的方法采用Fixnum,不能将符号(或字符串等)隐式转换为整数。
答案 1 :(得分:0)
这些多重嵌套的哈希很难读懂,不是吗?让我们散布一下你的哈希:
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} }}}
, 会有意义。但你没有。
就像我说的那样:这些嵌套的哈希值很难读......