与“Array #index”相比,`Array #include?`的目的是什么?
Array#include?
只提供比Array#index
提供的信息更弱的信息,即当Array#index
返回nil
,使用Array#include?
的相应方法调用Array#include?
将返回false
,当Array#index
返回一个整数时, Array#include?
返回true
。 此外,比较两者表明速度没有显着差异; 而Array#index
通常比Array#include?
显示更好的结果Array#include?
:
a = %w[boo zoo foo bar] t = Time.now 10000.times do a.include?("foo") end puts Time.now - t # => 0.005626235 t = Time.now 10000.times do a.index("foo") end puts Time.now - t # => 0.003683945
然后, Array#include?
的目的是Array#include?
? 是不是所有使用它的代码都可以使用Array#index
#index重写?
我知道这不是官方的原因,但我可以想到一些事情:
- 清晰度:作为名称,包括? 乍一看更有意义,并且通过将自身标识为布尔谓词,还可以轻松地直观地确认代码正确性。 这遵循使错误代码看起来错误的概念(请参阅http://www.joelonsoftware.com/articles/Wrong.html )
- 良好的输入:如果您想要的是布尔检查的布尔值,那么使数字可能导致错误
- 清洁度:看到打印输出“真实”而不是回到C并且没有布尔值可以更好吗?