Ruby 1.9.2上Hash值中不需要的额外[“”]

时间:2011-05-18 11:20:19

标签: 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')
      puts text
      @array_of_node << { :nodeId => nodeId, :text => text } 
    end
    puts @array_of_node
    return @array_of_node
  end

所以基本上,代码只是添加一堆Hash to Array,这很好。当我在循环中打印文本时,我也得到纯文本结果

What allergies do you have?
What dont you like?
What is your specific diet?

然而,当我打印出@array_of_node时,我得到了这个

{:nodeId=>"7", :text=>["What allergies do you have?"]}
{:nodeId=>"8", :text=>["What dont you like?"]}
{:nodeId=>"9", :text=>["What is your specific diet?"]}

在文中我有额外的[“...”],我不想要。我如何摆脱它,我真的不明白这一部分,因为这段代码在ruby 1.8.7中运行良好。我在这里做错了吗?

非常感谢你。

1 个答案:

答案 0 :(得分:0)

values_at方法返回一个数组,所以我认为这就是它发生的原因。尝试传递一个键,如下所示:

text = node.values_at('data')[0]['name']