2015-02-02 3 views
1

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

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

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

EDIT

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

+0

'include?' - метод рубинового массива, тогда как 'in? 'is rails' activesupport' method –

ответ

3

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

Но включать? метод доступен для всех перечислений. Как и в вашей обычной консоли рубинового вы можете попробовать:

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) 

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

+1

Спасибо за всесторонний ответ. Мне было интересно, можно ли уточнить еще одну вещь. Есть ли сценарий, в котором используется 'in?' выиграет больше, чем использование 'include?' ? Потому что сейчас я могу думать только о том, что «внутри»? представляет собой довольно бессмысленный метод, который дает «include?» уже существует для его цели. – adnann

+0

@adnann включают? является лучшей альтернативой, чем в России? – Ajay

+1

@adnann просто проверить мой ответ, я обновил его с сопоставлением производительности этих двух методов. надеюсь, что это поможет :) – Ajay

Смежные вопросы