ルビーの場合:
for i in A do
# some code
end
以下と同じです:
A.each do |i|
# some code
end
for
はカーネルメソッドではありません:
for
ruby の" " とは正確には何ですか- 他のキーワードを使用して同様のことを行う方法はありますか?
何かのようなもの:
total = sum i in I {x[i]}
へのマッピング:
total = I.sum {|i] x[i]}
ルビーの場合:
for i in A do
# some code
end
以下と同じです:
A.each do |i|
# some code
end
for
はカーネルメソッドではありません:
for
ruby の" " とは正確には何ですか何かのようなもの:
total = sum i in I {x[i]}
へのマッピング:
total = I.sum {|i] x[i]}
それはほとんど構文糖です。1 つの違いは、そのfor
周りのコードのスコープを使用する一方で、each
そのブロック内に別のスコープを作成することです。以下を比較してください。
for i in (1..3)
x = i
end
p x # => 3
対
(1..3).each do |i|
x = i
end
p x # => undefined local variable or method `x' for main:Object
for
メソッドの単なる構文糖衣ですeach
。これは、次のコードを実行することで確認できます。
for i in 1 do
end
これにより、次のエラーが発生します。
NoMethodError: undefined method `each' for 1:Fixnum
For は単なるシンタックス シュガーです。
つるはしより:
のために...で
前に、組み込みの Ruby ループ プリミティブは while と until だけだと言いました。では、この「ための」ものは何ですか? まあ、 for はほとんどシンタックス シュガーの塊です。あなたが書くとき
for aSong in songList aSong.play end
Ruby はそれを次のように変換します。
songList.each do |aSong| aSong.play end
for ループと each フォームの唯一の違いは、本体で定義されているローカル変数のスコープです。これについては 87 ページで説明しています。
for を使用して、Array や Range など、それぞれのメソッドに応答する任意のオブジェクトを反復処理できます。
for i in ['fee', 'fi', 'fo', 'fum'] print i, " " end for i in 1..3 print i, " " end for i in File.open("ordinal").find_all { |l| l =~ /d$/} print i.chomp, " " end
生成:
fee fi fo fum 1 2 3 second third
クラスが適切な each メソッドを定義している限り、for ループを使用してトラバースできます。
class Periods def each yield "Classical" yield "Jazz" yield "Rock" end end periods = Periods.new for genre in periods print genre, " " end
生成:
Classical Jazz Rock
Ruby には、リスト内包表記用の他のキーワードはありません (上で作成した sum の例のように)。 for
はそれほど一般的なキーワードではなく、メソッド構文 ( arr.each {}
) が一般的に好まれます。