我想创建一个case
检查多个参数。
“Ruby: conditional matrix? case with multiple conditions?”
基本上只有一个扭曲:第二个参数可以是三个值中的一个,a
,b
,nil
。
我希望将when
条件扩展为:
result = case [A, B]
when [true, ‘a’] then …
when [true, ‘b’] then …
when [true, B.nil?] then …
end
有什么建议吗?
答案 0 :(得分:1)
评论已经是nil
的具体测试的答案:
result = case [A, B]
when [true, 'a'] then …
when [true, 'b'] then …
when [true, nil] then …
end
但是你的问题激发了我一个更广泛的问题:如果第二个参数可以是什么怎么办?例如。你有这个决定表:
A B result
------------------
a b true
a _ halftrue
_ b halftrue
else false
其中_
是任何
一个可能的解决方案是一个类,它等于一切:
class Anything
include Comparable
def <=>(x);0;end
end
[
%w{a b},
%w{a x},
%w{x b},
%w{x y},
].each{|a,b|
result = case [a, b]
when ['a', 'b'] then true
when ['a', Anything.new] then :halftrue
when [Anything.new, 'b'] then :halftrue
else false
end
puts "%s %s: %s" % [a,b,result]
}
结果:
a b: true
a x: halftrue
x b: halftrue
x y: false