以下是代码的简化部分:
srand 0
WIDTH, HEIGHT = 10, 10
array = Array.new(HEIGHT){ [0]*WIDTH }
require "profile"
10000.times do
y, x = rand(HEIGHT), rand(WIDTH)
g = array[y][x] + [-1,+1].sample
array[y][x] = g unless [[y-1,x],[y+1,x],[y,x-1],[y,x+1]].any?{ |y, x|
y>=0 && y<HEIGHT && x>=0 && x<WIDTH && 1 < (array[y][x] - g).abs
}
end
我们看到(ruby 2.0.0p451 (2014-02-24) [i386-mingw32]
):
% cumulative self self total
time seconds seconds calls ms/call ms/call name
39.33 0.86 0.86 47471 0.02 0.05 nil#
如果我们完全删除unless
事物:
53.48 0.48 0.48 10000 0.05 0.09 nil#
看起来我们得到了这个nil#
操作:
很高兴得到一个深刻的答案。