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

5

我正在研究Rails的ActiveSupport扩展,发现了'in?'方法。在我看来,它的外观和工作方式与'include?'方法完全相同,只是反过来。

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

自从我开始使用Rails以来,我就一直使用“include?” 方法,所以有另一个完全相同的方法是很有趣的。这两种方法之间是否存在我没有注意到的差异?
编辑:
是否有任何情况下使用“in?” 比使用“include?” 更好?因为现在,我所能想到的是,“in?”是一个相当毫无意义的方法,因为“include?”已经存在了它的目的。

include? 是 Ruby 数组方法,而 in? 是 Rails 的 activesupport 方法。 - Rajarshi Das
1个回答

14
Rails 3.1版本之后可以使用in?方法。因此,如果要使用in?方法,我们需要标记require 'active_support',然后才能使用in?方法。但是,include?方法适用于所有的可枚举对象。例如,在普通的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)

您可以看到,include?比in?更快。


1
感谢您提供的全面答案。我想知道是否还有其他需要澄清的地方。在使用“包含”之外,是否存在任何情况可以更好地使用“in?”?因为目前,我所能想到的是,“in?”是一个毫无意义的方法,因为“include?”已经存在于其目的中。 - adnann
@adnann include? 是比 in? 更好的选择。 - Ajay
1
@adnann 请检查我的答案,我更新了这两种方法的性能比较。希望对你有所帮助 :) - Ajay
1
谢谢!你的回答很扎实。所以,in?方法毫无意义。 - adnann
非常有用的见解。 - Rajesh Paul
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接