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