0

为什么一旦 if 语句“g2k.has_key?(k)”为假,下面的代码就会退出每个循环

  e.element_children.all? do |n|
    k = n.name.to_sym
    logger.info("#{n.name} as symbol is '#{k}' is valid? = #{g2k.has_key?(k)}")
    if g2k.has_key?(k)
      logger.info("#{g2k[k] }= #{n.content}")
    #  @vehicle_data[g2k[k]] = n.content
    end
  end

这会按预期循环遍历所有元素子元素

  e.element_children.all? do |n|
    k = n.name.to_sym
    logger.info("#{n.name} as symbol is '#{k}' is valid? = #{g2k.has_key?(k)}")
    #if g2k.has_key?(k)
    #  logger.info("#{g2k[k] }= #{n.content}")
    #  @vehicle_data[g2k[k]] = n.content
    #end
  end

我正在使用带有 Ruy 1.9 的 rails 3.2,使用 nokogiri 解析 XML。

4

2 回答 2

3

一旦all?发现一些错误的东西,那么它不可能是全部,所以它将停止处理。

这是一个示例:http ://rubyfiddle.com/riddles/cb777 ---您会看到它在打印 5 后停止,因为 5 不是 < 5

(1..20).all? do |i|
  puts i
  i < 5
end

# prints:
1 
2 
3 
4 
5
于 2012-08-30T19:20:42.437 回答
0

除非您正在捕获 .all 的输出?方法你不应该使用它。。全部?用于确保数组中的每个元素都返回 true。.each 只会遍历所有这些。.detect 将迭代直到返回 true。

于 2012-08-30T21:13:35.630 回答