如果我想根据对象实例的类型使用case..when
进行切换,我可以这样做:
case obj
when Class1
"whatever"
when Class2
"something else"
end
但是,如果我正在比较的值是一个类本身,并且我想根据它所来自的类进行切换,那么case..when
是否仍然保持不变?以下不起作用,但做了什么?
class Foo < String; end
class Bar < Array; end
klass = Foo
case klass
when String
"klass descends from String"
when Array
"klass descends from Array"
end
基本上是<=
运算符的作用,但是在case..when
的上下文中。
编辑|为了澄清,我想支持在继承链中的任何地方进行匹配,而不仅仅是直接的父对象。
答案 0 :(得分:1)
这有效:
case
when klass <= String
"klass descends from String"
when klass <= Array
"klass descends from Array"
end
我不确定它是否比一堆if和elsif更好。
答案 1 :(得分:0)
这适合我,但不是很漂亮:
result = case
when klass.ancestors.include?(String)
"klass descends from String"
when klass.ancestors.include?(Array)
"klass descends from Array"
end