0

以下のコードは、if ステートメント "g2k.has_key?(k)" がfalseになるとすぐに各ループを終了するのはなぜですか?

  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

Rails 3.2 と Ruy 1.9 を使用し、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 に答える