我承担了Ruby on Rails的源代码查看,发现这样的代码:`===`如何工作?
case options
when /\A([a-z][a-z\d\-+\.]*:|\/\/).*/i
...
when String
...
when :back
...
when Proc
...
end
其中options
可以是String
,Symbol
,Proc
,或者Hash
对象。该===
比较只会在一种情况下返回true
:
'string' === /string/ # => false
:back === :back # => true
(Proc.new {}) === ProC# => nil
Hash.new === Hash # => false
如何红宝石case
工作,让比赛具有这种不同的情况?
操作数顺序也可能令人困惑。 'case obj;当模式; end'调用'pattern === obj',而不是'obj === pattern''。 – Stefan