Рассмотрим это:
@text = 'foobar'
def method1(string)
if @text.match(/#{string}/)
true
else
false
end
end
Это может быть уменьшено до:
def method2(string_or_regex)
if @text[string_or_regex]
true
else
false
end
end
метод струны []
позволяет передать строку или шаблон. Если это строка, метод использует ее для поиска с фиксированной строкой/строкой. Если шаблон передан, он возвращает соответствующий текст.
Однако Ruby более дружелюбный, чем этот. Нам не нужно говорить об этом, чтобы вернуть истинное или ложное значение условно. В Ruby значение nil или false
считается ложным, а все остальное - «truethy». Мы можем преобразовать значение истина/ложь с помощью !!
, который является двойной логическое «не»:
true # => true
'foo' # => "foo"
false # => false
nil # => nil
!true # => false
!'foo' # => false
!false # => true
!nil # => true
!!true # => true
!!'foo' # => true
!!false # => false
!!nil # => false
Зная, что и струны []
возвращает ноль, если не найден, или текст соответствия, если найдено:
'foo'['foo'] # => "foo"
'foo'['bar'] # => nil
мы можем уменьшить оригинальный способ:
def method3(string_or_regex)
[email protected][string_or_regex]
end
Вот что происходит тестирование каждого из указанных выше способов:
method1('foo') # => true
method1('baz') # => false
method2('foo') # => true
method2(/foo/) # => true
method2('baz') # => false
method2(/baz/) # => false
method3('foo') # => true
method3(/foo/) # => true
method3('baz') # => false
method3(/baz/) # => false
Вы должны быть осторожным интерполированием объекта регулярного выражения в другое регулярное выражение:
string = /foo/
/#{string/ # => /(?-mix:foo)/
(?-mix:
являются модели флагов быть вставлен в другом шаблоне, который может открыть свой шаблон для всех видов странно поведения и очень сложно найти ошибки. Вместо этого, я настоятельно рекомендую использовать source
метод, если вы собираетесь сделать это, что приводит к оригинальным узором вставляется:
/#{string.source}/ # => /foo/
Stack Overflow не сайт «напишите код для меня». Вместо этого мы помогаем вам исправлять проблемы с кодом, который вы написали. Пожалуйста, покажите нам, что вы пробовали, объясните, почему он не делает то, что вы хотите, и мы с радостью вам поможем. –
Вы можете легко найти свой ответ в [ruby-doc] (http://www.ruby-doc.org/core-2.1.4/String.html) –
Я обновил свой пост. – user3014317