Сравнение рубин rspec и строк

Я не эксперт по рубину, и может быть, это будет глупый вопрос... но я слишком любезен о странности (я думаю), которую я нашел в RSpec-матчере, названном match.

Вы знаете, что match принимает ввод строки или регулярного выражения. Пример:

"test".should match "test" #=> will pass
"test".should match /test/ #=> will pass

Странный начинается, когда вы вставляете специальные символы регулярных выражений во входную строку:

"*test*".should match "*test*" #=> will fail throwing a regex exception

Это означает (я думал), что входные строки интерпретируются как регулярное выражение, тогда мне следует избегать специальных символов регулярных выражений, чтобы заставить его работать:

"*test*".should match "\*test\*" #=> will fail with same exception
"*test*".should match /\*test\*/ #=> will pass

Из этого базового теста я понимаю, что match обрабатывает входные строки как регулярные выражения, но не позволяет избежать специальных символов регулярных выражений.

Я прав? Разве это не сингулярное поведение? Я имею в виду, это строка или регулярное выражение!


ИЗМЕНИТЬ ПОСЛЕ ОТВЕТА:

После DigitalRoss (справа) ответьте на следующие тесты:

"*test*".should match "\\*test\\*" #=> pass
"*test*".should match '\*test\*' #=> pass
"*test*".should match /\*test\*/ #=> pass

Ответы

Ответ 1

То, что вы видите, это различная интерпретация символов с обратным слэшем в String vs Regexp. В мягкой (") кавычной строке \* становится *, но /\*/ - это действительно обратная косая черта, сопровождаемая звездой.

Если вы используете жесткие кавычки (') для объектов String или двойные символы обратной косой черты (только для строк), то ваши тесты должны давать одинаковые результаты.