以下是两个执行相同操作的简单块:
a = (0..100).to_a
a.all? do |x|
!(x == 1000)
end
nil == a.index do |x|
x == 1000
end
Run Code Online (Sandbox Code Playgroud)
除了第二个一直快一点.为什么?
user system total real
testing all 1.140000 0.000000 1.140000 ( 1.144535)
testing index 0.770000 0.000000 0.770000 ( 0.769195)
Run Code Online (Sandbox Code Playgroud)
原因是这index
是一种方法Array
.Ruby将在项目上迭代(在C中)并依次将它们放到块中.
在另一方面,all?
,none?
,one?
(将所有比较慢30%左右),是的方法Enumerable
.他们将调用each
,这将产生一个C函数,它将产生块.时间上的差异是由于yield
涉及两个s 的事实.
请注意all?
等人的专业版本.可以定义Array
,你会得到相同的表现index
,但这将有点丑陋和冗余......