Я не эксперт по рубинам, и, возможно, это покажется глупым вопросом ... но я слишком смел по поводу странности (я думаю) Я » Он находится в сопоставлении 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