与“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并且没有布尔值可以更好吗?