4
case "Hello".class
  when Integer
      print "A"
  when String
      print "B"
  else
      print "C"
end

なぜ「C」を取得するのですか?"String".classあなたが評価するならばあなたが得るので「B」を期待していStringました。

4

1 に答える 1

7

紛らわしいことに、Rubyのcaseステートメントは===、各ケースをサブジェクトと比較するために使用します。 Class#===そのクラスのインスタンスをテストしますが、クラス自体はテストしません。

> Fixnum === Integer
false
> Fixnum === 1
true

caseRubyが促進しようとしている動作は次のとおりです。

case "Hello"
  when Integer
    puts "A"
  when String
    puts "B"
  else
    puts "C"
end
于 2013-02-09T07:26:22.333 に答える