Разница между "в?" и "включить?" в рельсах
Я изучал расширения 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)
Вы можете увидеть, включить? быстрее чем в?