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')

我想知道我是不是做错了什么

这是我刚刚从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')
      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有助于发现数组的不干净用法。也去过那里;)。