“在吗?”之间的区别 和“包含?” 在Rails中

adn*_*ann 4 ruby-on-rails activesupport

我正在查看Rails的ActiveSupport扩展,遇到了“输入?”字样。方法。对我来说,它的外观和工作方式与“ include?”完全相同 方法,但只是相反。

([1..5]).include? 1
1.in? ([1..5])
Run Code Online (Sandbox Code Playgroud)

我一直在使用“包含?” 自从我第一次开始使用Rails以来,这种方法非常有趣,因为还有另一种方法可以做完全相同的事情。我缺少的两种方法有什么区别吗?

编辑

在任何情况下都使用“输入”吗?会比使用“包含”受益更多??因为现在,我只能想到的是“在吗?” 给“ include”一个相当无意义的方法是什么?为此目的已经存在。

Aja*_*jay 8

在?在Rails 3.1之后可用该方法。那么,如果您要使用?方法,我们需要标记要求'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
Run Code Online (Sandbox Code Playgroud)

从Rails控制台:

1.in?(1..5)
=> true 
(1..5).include? 1
=> true
Run Code Online (Sandbox Code Playgroud)

检查其性能:

 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)
Run Code Online (Sandbox Code Playgroud)

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