2014-02-11 7 views
1

Python имеет следующий элегантный синтаксис для проверки одна строка, является ли подстрока другой:подстроку Синтаксисы в Руби

'ab' in 'abc' # True 

Есть ли эквивалент элегантный синтаксис в Ruby?

Я знаком с синтаксисом Ruby "abc".includes? "ab", но мне интересно, существует ли также и обратный синтаксис (где первый параметр - это подстрока, а второй - строка).

+2

IIRC по умолчанию нет, но это строка или два в классе String, no? –

+0

Интересно, почему ответ toro2k был удален. Это единственный правильный ответ. – sawa

+1

Потому что ОП уже знал о 'include? 'И исключил его. –

ответ

7

Существует не такой метод в стандартной библиотеке на Ruby но Rails ActiveSupport обеспечивает #.in? метод:

1.9.3-p484 :004 > "ab".in? "abc" 
=> true 

Вот исходный код: https://github.com/rails/rails/blob/e20dd73df42d63b206d221e2258cc6dc7b1e6068/activesupport/lib/active_support/core_ext/object/inclusion.rb

+1

Not Rails, но ActiveSupport. – Hauleth

+0

Спасибо за исправление. – DNNX

4

Define "элегантный".

Это делает поиск подстроки и возвращает, если найден «хит»:

'abc'['ab'] # => "ab" 

Использование !! преобразует возвращаемое значение в истина/ложь, так "ab" становится истинным:

!!'abc'['ab'] # => true 

Зная, что это просто, если вы хотите что-то ближе:

class String 
    def in?(other) 
    !!other[self] 
    end 
end 

'ab'.in?('abc') # => true 
'ab'.in? 'abc' # => true 

Или используйте require 'active_support/core_ext/object/inclusion' для вишневого выбора определения активного супера, которое расширяет все объекты, чтобы разрешить in?. См. http://edgeguides.rubyonrails.org/active_support_core_extensions.html#in-questionmark. Поверхность/недостаток - это изменение всех объектов.

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