每定义一个类时,它们都继承了四个不同的等价性检查方法,理解其工作方式才能帮助你在需要的时候更好的重载它们
检测是否为同一对象 (具有相同的 object_id)
当使用对象为 hash 的键时,如果希望两个相似的对象具有相同的哈希键时需要同时实现 hash 和 eql?两个方法
class Color
attr_reader :name
def initialize(name)
@name = name
end
def hash
name.hash
end
def eql?(o)
name.eql?(o.name)
end
end
==
操作符irb> 1 == 1.0
---> true
===
操作符==
irb> /er/ === 'typer'
---> true
irb> 'typer' === /er/
---> false
irb> [1,2,3].is_a?(Array)
---> true
irb> Array === [1,2,3]
---> true
irb> [1,2,3] === Array
---> false
case command
when 'start' then start
when 'stop', 'quit' then stop
when /^cd\s+(.+)$/ then cd($1)
when Numeric then timer(command)
else rails error
end
等价于
case command
if 'start' === command then start
elsif 'stop' === command then stop
elsif 'quit' === command then stop
elsif /^cd\s+(.+)$/ === command then cd($1)
elsif Numeric === command then timer(command)
else rails error
end