在下面的 Ruby 代码中,我有两种方法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
如您所见,这两种方法之间的区别在于,第一种方法是在块d100
内部调用detect
,而在第二种方法中,100 个随机数存储在numbers
Array 中,然后在d100_in_detect
.
假设我如下调用这两种方法
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 ]
我不明白为什么这两种方法会返回如此不同的结果。在' 块中调用d100
方法有什么含义吗?detect