Ruby for
ループでローカル変数を設定できるかどうかを知りたいと思います。forループのRubyローカル変数
より正確には、私はこのように動作するようにfor
ループを持っているしたいと思います:
tmp = 0
1.upto(5) { |i;tmp| puts i; tmp = i; } ; "tmp: #{tmp}"
tmp
変数はfoorループ内で実行されますどのような変更しないでください。
Ruby for
ループでローカル変数を設定できるかどうかを知りたいと思います。forループのRubyローカル変数
より正確には、私はこのように動作するようにfor
ループを持っているしたいと思います:
tmp = 0
1.upto(5) { |i;tmp| puts i; tmp = i; } ; "tmp: #{tmp}"
tmp
変数はfoorループ内で実行されますどのような変更しないでください。
私はそれが可能だとは思わない、for
ループは独自の範囲を持っていません。
あなたが外変数
tmp = 0
for i in (1..5) do
proc do |;tmp|
puts i
tmp = i
end[]
end
これはひどいですがマスキングするための新しいブロックを導入することができます。 for
とeach
の違いは、for
ループの反復変数が外側スコープを汚染することです。
x = []
# i has same scope as x
for i in (1..3)
# closure captures i outside the loop scope, so...
x << lambda { i }
end
# WAT
x.map(&:call) # [3, 3, 3]
x = []
(1..3).each { |i| x << lambda { i } }
# sanity restored
x.map(&:call) # [1, 2, 3]
はよりeach
のようなあなたのfor
行為をするために上記の私のハックを使用すると、すでに混乱行動がさらに混乱になります。 for
を完全に避ける方がよいでしょう。
@Maxありがとう、 'proc'のあなたの例は私の質問に答えます。私はそれが素晴らしい構造ではないことに同意します。反対に、 'for'はコンピュータプログラミングの中で最もよく書かれた言葉であり(それは'あれ ')、それをRubyのビジネスから切り離すことは残念です。 –
@NicolaMingotti私はRubyを使っている間、このような実験の外に一つの 'for'ループを書いていません。私はそれがそこにしかないと確信しているので、人々は他の言語から来るときに驚くことはありません。 – Max
ご迷惑をおかけして申し訳ありません。 –
あなたは何を達成しようとしていますか?外側からの変数がループ内で変更されないようにするには、変更しないでください。あなたがそれを変更したくない場合は、ループ内の割り当てのポイントは何ですか? –
共通のパターンを保つために、私は他のプログラミング言語と同じように 'for'ループを使いたいと思います。ループのローカル変数を決定することができるのは実質的なメリットですが、なぜそうなのか議論する必要はないと思います。 –