2015-07-01 29 views
-1

比方说,我在萨翁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] 

给类型错误

虽然我已经看到这种类型的代码对萨翁的脚本。什么不符合我的情况?

回答

2

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

hash1[:nod­e1][:node2­][:node3]方法[]。

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

+0

你能详细解释一下吗?我不明白。我在哪里可以找到这种[]方法记录?此外,我看到了这个代码[这里](http://stackoverflow.com/questions/4153215/parsing-soap-response-using-savon-response-to-hash-conversion-method)在最后一行他做all_data =:hres [:response] [:asses_data] [:date] [:amount] [:assesReference] [:year] [:cusOffCode] [:serie] [:number] [:date] [:time]。这可能如何,而不是我的例子? –

+0

osman指的是[Fixnum#[]](http://ruby-doc.org//core-2.2.0/Fixnum.html#method-i-5B-5D)。 –

+0

thnx指出了这一点,但我仍然不明白它是如何使用从savon哈希结构与我的相同,我不能用我的哈希。我不明白这种方法在那方面做了什么。如果有人能解释它,我将不胜感激。 –

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

就像我说过的:这些嵌套的哈希是一种痛苦的阅读...

+0

这是非常有道理的,虽然我问的原因并不是因为我觉得他们难以阅读,而是因为我在这里看到了这个代码,他在最后一行他做了all_data = hres [:response] [:asses_data] [:日期] [:数量] [:assesReference] [:年] [:cusOffCode] [:意甲] [:号码] [:日期] [:时间]。那可能怎么样?它有相同的散列结构(xml嵌套散列输出类似于我的例子,或者我错了吗?) –

+0

@PenelopeAetherMitsubishi - 好吧,我没有看到有问题的散列,但逻辑假设是,它不是' t与你例子中的散列相同。我的意思是'... [:date]'最有可能返回包含一个键':time'的散列。否则我不知道它是如何工作的。 –