繰り返しのときの代入の持ち越し?について
eachなどで繰り返しをする際に2回目以降、最後に代入した変数を使用して配列の中から一つをランダムに除外したものを表示したいのですがなかなか上手くいきません。
以下のようにしているのですが、繰り返し2回目になるとエラーが出てしまいます。
(1..5).each do |num|
if(num - 1 == 0)
puts "1回目"
no_fruits = nil
else
puts num.to_s << "回目"
no_fruits = no
end
fruit1 = "apple"
fruit2 = "orange"
fruit3 = "strawberry"
fruit4 = "kiwi"
fruit5 = "cherry"
fruit6 = "banana"
fruit7 = no_fruits
all = [fruit1, fruit2, fruit3, fruit4, fruit5, fruit6, fruit7 ].reject {|item| item == fruit7 }
p all
no = all.sample
p no
end
結果↓
1回目
["apple", "orange", "strawberry", "kiwi", "cherry"]
"strawberry"
2回目
Traceback (most recent call last):
2: from test.rb:12:in `<main>'
1: from test.rb:12:in `each'
test.rb:18:in `block in <main>': undefined local variable or method `no' for main:Object (NameError)
Did you mean? not
となり上手くいきませんでした。
一応以下のようにすればそれっぽいことはできましたが、無理やりやっている感じがします。
(1..5).each do |num|
if(num - 1 == 0)
puts "1回目"
fruit1 = "apple"
fruit2 = "orange"
fruit3 = "strawberry"
fruit4 = "kiwi"
fruit5 = "cherry"
fruit6 = "banana"
else
puts num.to_s << "回目"
fruit1 = "apple"
fruit2 = "orange"
fruit3 = "strawberry"
fruit4 = "kiwi"
fruit5 = "cherry"
fruit6 = "banana"
fruit7 = [fruit1, fruit2, fruit3, fruit4, fruit5, fruit6].sample
puts "除外 = " << fruit7
end
all = [fruit1, fruit2, fruit3, fruit4, fruit5, fruit6, fruit7].reject {|item| item == fruit7 }
p all
end
もっと他に良いやり方があればぜひ教えて頂きたいです。