1. ホーム
  2. ルビー

[解決済み】Rubyの "for "と "each "について

2022-04-10 20:29:49

質問

Rubyのループについてちょっと質問です。この2つの方法はコレクションを反復処理する際に違いがあるのでしょうか?

# way 1
@collection.each do |item|
  # do whatever
end

# way 2
for item in @collection
  # do whatever
end

これらはまったく同じなのか、それとも微妙な違いがあるのか、ちょっと考えてみました。 @collection がnilの場合)。

どのように解決するのですか?

これだけの違いです。

を各々で使用します。

irb> [1,2,3].each { |x| }
  => [1, 2, 3]
irb> x
NameError: undefined local variable or method `x' for main:Object
    from (irb):2
    from :0

のためのものです。

irb> for x in [1,2,3]; end
  => [1, 2, 3]
irb> x
  => 3

を使用すると for ループが終了した後も、イテレータ変数は生き続けています。しかし each ただし、ループの開始前にすでにローカル変数として定義されていた場合は除きます。

それ以外では for は単なるシンタックスシュガーで each メソッドを使用します。

いつ @collectionnil の両方のループが例外を投げます。

例外:未定義のローカル変数またはメソッド `@collection' for main:Object