Ruby 1.9.2上的哈希值中不需要的额外值
我想知道我是不是做错了什么 这是我刚刚从1.8.6升级的ruby 1.9.2代码Ruby 1.9.2上的哈希值中不需要的额外值,ruby,Ruby,我想知道我是不是做错了什么 这是我刚刚从1.8.6升级的ruby 1.9.2代码 def prepares_data(hash_nodes) @array_of_node = Array.new hash_nodes.each do | node | nodeId = node.values_at('self')[0].split('/').last text = node.values_at('data')[0].values_at('name')
def prepares_data(hash_nodes)
@array_of_node = Array.new
hash_nodes.each do | node |
nodeId = node.values_at('self')[0].split('/').last
text = node.values_at('data')[0].values_at('name')
puts text
@array_of_node << { :nodeId => nodeId, :text => text }
end
puts @array_of_node
return @array_of_node
end
def准备_数据(散列_节点)
@array\u of_node=array.new
散列|节点。每个do |节点|
nodeId=node.values_位于('self')[0]。拆分('/')。最后
text=node.values\u at('data')[0]。values\u at('name'))
放置文本
@数组\u的节点nodeId,:text=>text}
结束
放置\u节点的@array\u
返回\u节点的@array\u
结束
所以基本上,代码只是在数组中添加了一堆散列,这很好。当我在循环中打印文本时,我也会得到纯文本结果
What allergies do you have?
What dont you like?
What is your specific diet?
你有什么过敏症?
你不喜欢什么?
你的具体饮食是什么?
然而,当我打印出_节点的@array_时,我得到了这个
{:nodeId=>"7", :text=>["What allergies do you have?"]}
{:nodeId=>"8", :text=>["What dont you like?"]}
{:nodeId=>"9", :text=>["What is your specific diet?"]}
{:nodeId=>“7”,:text=>[“你有什么过敏症?”]}
{:nodeId=>“8”,text=>[“你不喜欢什么?”]}
{:nodeId=>“9”,text=>[“你的具体饮食是什么?”]}
在课文中我有多余的[“…”],这是我不想要的。我如何摆脱它,我真的不理解这一部分,因为这段代码在ruby 1.8.7中运行良好。我做错什么了吗
非常感谢你 values\u at方法返回一个数组,所以我认为这就是它发生的原因。尝试按如下方式传递密钥:
text = node.values_at('data')[0]['name']
代码中的行“@array\u of_node nodeId,:text=>text}”对吗?很抱歉,它应该是@array\u of_node nodeId,:text=>text}对,但在本文中显示不正确。与其使用
put
不如使用p
?是的,请尝试使用“p text”检查值,如果它是一个数组?请注意array.to_s在1.8和1.9之间的差异!1.8用于执行self.join,而1.9将别名添加到_s以进行检查,因此它输出包含引号和方括号的数组。依靠to_方法获取数组的字符串输出是不干净的。因此,切换到1.9有助于发现数组的不干净用法。也去过那里;)。