我希望有一个代码:
x = Date
case x
when Date
puts "Date"
when String
puts "String"
else
puts "Unknown"
end
我知道x == Date
是真的,但x === Date
是假的。所以当我期待“约会”时,我会得到“未知”。
有什么方法可以改变上面块的使用过的运算符/函数,这样我就可以得到预期的结果了吗?
答案 0 :(得分:5)
x = Date
case x.name
when "Date"
puts "Date"
when "String"
puts "String"
else
puts "Unknown"
end
答案 1 :(得分:2)
AFAIK,如果您必须在案例陈述中进行===
以外的比较,则必须使用case
更详细的语法:
x = Date
case
when x == Date
puts "Date"
when x == String
puts "String"
else
puts "Unknown"
end
答案 2 :(得分:2)
另一种方法是:
class ComparableClass
attr_accessor :klass
def initialize(klass)
@klass = klass
end
end
class Class
alias_method :'old_triple_equals', :'==='
def ===(other)
if other.is_a? ComparableClass
self == other.klass
else
old_triple_equals(other)
end
end
end
klass = Date
case ComparableClass.new(klass)
when Date
puts 'Its a date'
when String
puts 'Its a string'
else
puts 'Its something else'
end
#=> Its a date