0

私はこの非常に単純なコード ブロックを書きましたが、期待どおりのことはすべて実行しますが、出力の最後に常にエラー メッセージ「nil:NilClass の未定義のメソッド `%' (NoMethodError)」が表示されます。これはどのように/なぜ発生し、どうすれば修正できますか?

def fizzblam

range =* (1..100)
range.each do |i|
if range[i] % 7 == 0 && range[i] % 5 == 0
puts "fizzblam"
elsif range[i] % 7 == 0 && range[i] % 5 != 0
puts "blam"
elsif range[i] % 7 != 0 && range[i] % 5 == 0
puts "fizz"
else puts range[i]
end
end
end

fizzblam
4

1 に答える 1

2

の要素rangeは 1 から 100 ですが、へのインデックスrangeは 0 から 99 です。このeachメソッドは、インデックスではなく、配列の要素を既に提供していiますrange[i]

の代わりに配列aにインデックスを付けた場合、より合理的なエラーが発生する可能性があります— 前者はスローし、後者は を返します。a.fetch(i)a[i]IndexErrornil

于 2013-05-05T21:33:13.117 に答える