我正在越过Rails' ActiveSupport扩展程序和我遇到了' in?'方法。对我而言,它的外观和作用与“包含”完全相同?'方法,但反过来。
([1..5]).include? 1
1.in? ([1..5])
我一直在使用' include?'自从我第一次开始使用Rails之后的方法,所以有趣的另一种方法完全相同。我错过的两种方法有什么不同吗?
修改
是否存在使用' in?'的情况?比使用“包含”更有益吗?' ?因为现在,我所能想到的只是“' in?'给出了一个相当无意义的方法,包括?'为了它的目的已经存在。
答案 0 :(得分:5)
在?方法在Rails 3.1之后可用。那么如果你想使用?方法,我们需要标记要求' active_support'那我们可以利用吗?方法
但包括?适用于所有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 console:
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)
你可以看到,包括?比在?
更快