在执行正则表达式匹配时,Ruby不会自动将符号串化,当您有包含符号的变量,而您忘记了在尝试正则表达式匹配之前需要对它们调用#to_s时,这很容易做到:
>> :this =~ /./
=> false
>> :this =~ :this
=> false
>> :this =~ /:this/
=> false事实证明,:=~是在Ruby1.8的原始类Object中定义的:
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语言学家知道?
发布于 2011-02-03 19:04:57
我不知道为什么决定1.8应该这样做的原因,但1.9在这方面发生了变化:
>> RUBY_VERSION #=> "1.9.2"
>> :this =~ /./ #=> 0
>> :this =~ /is/ #=> 2https://stackoverflow.com/questions/4884242
复制相似问题