Rails:'in?'和'include?'在Rails中的区别

Rails: Difference between 'in?' and 'include?' in Rails

我正在研究 Rails' ActiveSupport 扩展,我遇到了 'in?' 方法。对我来说,它的外观和工作方式与 'include?' 方法完全相同,但恰恰相反。

([1..5]).include? 1
1.in? ([1..5])

自从我第一次开始使用 Rails 以来,我一直在使用 'include?' 方法,所以有趣的是还有另一种方法可以做完全相同的事情。我遗漏的这两种方法有什么不同吗?

编辑

是否存在使用 'in?' 比使用 'include?' 更有益的情况?因为现在,我能想到的是 'in?' 是一个毫无意义的方法,因为 'include?' 已经存在了。

在?方法在 Rails 3.1 之后可用。那么如果你想用在?方法,我们需要标记 require 'active_support' 然后我们可以使用 in?方法。

但是包括?方法适用于所有 Enumerables。就像在您的普通 ruby 控制台中一样,您可以尝试:

From irb: 
(1..5).include? 1 #you are checking for include? on a range.
=> true
(1..5).to_a.include? 1 # you are checking on an Array.
=> true 
2.1.5 :023 > 1.in?(1..5)
NoMethodError: undefined method `in?' for 1:Fixnum

来自 rails 控制台:

1.in?(1..5)
=> true 
(1..5).include? 1
=> true

查看他们的表现:

 require 'benchmark'
=> false
 puts Benchmark.measure { 90000.in?(1..99000)}
  0.000000   0.000000   0.000000 (0.000014)
 puts Benchmark.measure { (1..99000).include? 90000 }
  0.000000   0.000000   0.000000 ( 0.000007)

可以看到,包括?比in快吗?