次のようなコードが必要です。
x = Date
case x
when Date
puts "Date"
when String
puts "String"
else
puts "Unknown"
end
私はそれx == Date
が真実であることを知っていますが、x === Date
間違っています。そのため、「日付」を期待すると「不明」になります。
上記のブロックで使用されている演算子/関数を変更して、期待される結果を得る方法はありますか?
次のようなコードが必要です。
x = Date
case x
when Date
puts "Date"
when String
puts "String"
else
puts "Unknown"
end
私はそれx == Date
が真実であることを知っていますが、x === Date
間違っています。そのため、「日付」を期待すると「不明」になります。
上記のブロックで使用されている演算子/関数を変更して、期待される結果を得る方法はありますか?
私の知る限り、caseステートメント以外===
で比較する必要がある場合は、次のより冗長な構文を使用する必要がありますcase
。
x = Date
case
when x == Date
puts "Date"
when x == String
puts "String"
else
puts "Unknown"
end
これを行う別の方法は次のとおりです。
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