caseで変数のクラスを比較しようとすると上手く行かない
ある変数の型をチェックして、そのクラスによって処理を変えて、他のところに渡すような処理を考えていました。その処理自体は一行程度で済むので、どうせならcase
で書き換えてもいいだろうと思って、書き換えてみたところ、上手く動いてくれません。
具体的には、以下のようなコードです:
def type_check_with_if n
if n.class == String
"文字列だ!"
elsif n.class == Hash
"ハッシュだ!"
end
end
def type_check_with_case n
case n.class
when String then "文字列だ!"
when Hash then "ハッシュだ!"
end
end
test_seed = ["foobar", {:foo => :bar}]
p test_seed.map {|n| type_check_with_if n }
# => ["文字列だ!", "ハッシュだ!"]
p test_seed.map {|n| type_check_with_case n}
# => [nil, nil]
本当なら、type_check_with_case
でも["文字列だ!", "ハッシュだ!"]
という出力を期待しているのですが、結果は上記の通り、nil
の配列です。
もしかして、自分はcase
の仕様を何か勘違いしているのでしょうか? もし、勘違いしていたとするならば、参考情報を含めて教えて頂ければ嬉しいです。