次のRubyコードには、2つのメソッドがd100_in_detect
あり、の結果に従ってに含まれる一意の要素(簡単にするための数値)d100_out_detect
を返します。Array
ary
d100
def d100
1 + ( rand 100 )
end
def d100_in_detect( ary )
choice = [ ]
100.times do
choice.push ary.detect { |el| d100 <= el }
end
choice.uniq.sort
end
def d100_out_detect( ary )
choice = [ ]
numbers = [ ]
100.times do
numbers.push d100
end
numbers.each do |i|
choice.push ary.detect { |el| i <= el }
end
choice.uniq.sort
end
ご覧のとおり、2つの方法の違いは、最初の方法ではブロックd100
内で呼び出さdetect
れ、2番目の方法では100個の乱数がnumbers
配列に格納され、で発生するように使用されることd100_in_detect
です。
次のように2つのメソッドを呼び出したとしましょう。
ary = [ ]
50.times do |i|
ary.push i * 5
end
puts '# IN DETECT #'
print d100_in_detect ary
puts
puts '# OUT DETECT #'
puts d100_out_detect ary
puts
典型的な出力は次のとおりです。
# IN DETECT #
[ 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55 ]
# OUT DETECT #
[ 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100 ]
2つの方法がなぜそのような異なる結果を返すのか理解できません。のブロックd100
でメソッドを呼び出すことに何か影響はありますか?detect