Vol*_*ort 4 ruby string class switch-statement
case "Hello".class
when Integer
print "A"
when String
print "B"
else
print "C"
end
Run Code Online (Sandbox Code Playgroud)
为什么我得到"C"?期待"B",因为如果你评价"String".class你确实得到了String.
令人困惑的是,Ruby的case声明用于===将每个案例与主题进行比较. Class#===测试该类的实例,但不测试类本身:
> Fixnum === Integer
false
> Fixnum === 1
true
Run Code Online (Sandbox Code Playgroud)
caseRuby试图推广的行为是:
case "Hello"
when Integer
puts "A"
when String
puts "B"
else
puts "C"
end
Run Code Online (Sandbox Code Playgroud)