NoMethodError: неопределенный метод `match?' для "Рубина": Строка

Я пытаюсь проверить, соответствует ли ввод пользователя RegEx [a-zA-z] поэтому я проверил документы для правильного метода. я нашел match? в Ruby-doc.org и скопировал пример, показанный в документах, в irb, но вместо true Я получаю это:

2.3.3 :001 > "Ruby".match?(/R.../) 
NoMethodError: undefined method `match?' for "Ruby":String
Did you mean?  match
        from (irb):1
        from /usr/local/rvm/rubies/ruby-2.3.3/bin/irb:11:in `<main>'

Почему этот метод не работает в моем IRB?

1 ответ

Решение

String#match? а также Regexp#match? В Ruby 2.4 появились новые методы. Проверьте здесь и здесь.

Этот новый синтаксис не только псевдоним. Это быстрее, чем другие методы, главным образом потому, что не обновляет $~ глобальный объект. Согласно этому тесту, он работает в три раза быстрее, чем другие методы.

Кстати, чтобы достичь своей цели (проверьте, соответствует ли строка регулярному выражению), вы можете [1] обновить версию ruby, чтобы использовать эту новую функцию, или [2] использовать другой подход.

Например, вы можете использовать оператор =~, который возвращает nil, если не найден, или позицию, с которой начинается совпадение. Можно использовать так:

if "Ruby" =~ /R.../
   puts "found"
end
Другие вопросы по тегам