Разница между "в?" и "включить?" в рельсах

Я изучал расширения ActiveSupport в Rails и наткнулся на 'in?' метод. Для меня это выглядит и работает так же, как "включить?" метод, но только наоборот.

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

Я использовал "включить?" Метод, так как я впервые начал использовать Rails, поэтому интригует, что есть еще один метод, который делает то же самое. Есть ли какая-то разница в двух методах, которые мне не хватает?

РЕДАКТИРОВАТЬ

Есть ли сценарий, где используется "в"? выиграет больше, чем использование 'include?'? Потому что сейчас все, что я могу думать, это то, что внутри? довольно бессмысленный метод, заданный "включить" уже существует для своей цели.

1 ответ

Решение

В? Метод доступен после Rails 3.1 . Так что, если вы хотите использовать в? метод, нам нужно пометить require 'active_support', тогда мы можем использовать в? метод.

Но включить? метод доступен для всех перечислимых. Как и в обычной консоли 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

С рельсов консоли:

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)

Вы можете увидеть, включить? быстрее чем в?

Другие вопросы по тегам