Почему Ruby не Symbol # = ~ (оператор соответствия регулярному выражению)? - PullRequest
7 голосов
/ 03 февраля 2011

Ruby не выполняет автоматическую последовательность символов при выполнении сопоставления с регулярным выражением, что легко сделать, если у вас есть переменные, содержащие символы, и вы забыли, что вам нужно вызвать #to_s для них перед попыткой сопоставления с регулярным выражением:

>> :this =~ /./
=> false
>> :this =~ :this
=> false
>> :this =~ /:this/
=> false

Оказывается, что: = ~ определено в Object, первичном классе Ruby 1.8:

http://rubybrain.com/api/ruby-1.8.7/doc/index.html?a=M000308&name==~

Конечно, реализация просто возвращает false, оставляя его до подклассов, таких как String и Regexp, для обеспечения значимых реализаций.

Так почему же Symbol не предоставляет что-то вроде следующего?

def =~(pattern)
  self.to_s =~ pattern
end

Любые лингвисты Ruby там знают?

1 Ответ

9 голосов
/ 03 февраля 2011

Я не знаю причину, почему было решено, что 1.8 должен вести себя так, но 1.9 изменилось в этом отношении:

>> RUBY_VERSION #=> "1.9.2"
>> :this =~ /./ #=> 0
>> :this =~ /is/ #=> 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...