2

次のようなコードが必要です。

x = Date

case x
when Date
  puts "Date"
when String
  puts "String"
else
  puts "Unknown"
end

私はそれx == Dateが真実であることを知っていますが、x === Date間違っています。そのため、「日付」を期待すると「不明」になります。

上記のブロックで使用されている演算子/関数を変更して、期待される結果を得る方法はありますか?

4

3 に答える 3

2

私の知る限り、caseステートメント以外===で比較する必要がある場合は、次のより冗長な構文を使用する必要がありますcase

x = Date

case
when x == Date
  puts "Date"
when x == String
  puts "String"
else
  puts "Unknown"
end
于 2013-04-28T10:15:10.193 に答える
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
于 2013-04-28T12:11:25.367 に答える