为什么Ruby不符号#=〜(正则表达式匹配运算符)?
在对它们执行正则表达式匹配时,Ruby不会自动对符号进行字符串化,这在包含符号的变量时很容易实现,并且在尝试正则表达式匹配之前忘记需要在它们上调用#to_s:
>> :this =~ /./ => false >> :this =~ :this => false >> :this =~ /:this/ => false
事实certificate:=〜是在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.8应该这样做的原因,但1.9在这方面有所改变:
>> RUBY_VERSION #=> "1.9.2" >> :this =~ /./ #=> 0 >> :this =~ /is/ #=> 2