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快吗?
我正在研究 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快吗?