多参数案例

时间:2015-11-11 19:19:41

标签: ruby

我想创建一个case检查多个参数。

Ruby: conditional matrix? case with multiple conditions?” 基本上只有一个扭曲:第二个参数可以是三个值中的一个,abnil

我希望将when条件扩展为:

 result = case [A, B]
  when [true, ‘a’] then …
  when [true, ‘b’] then …
  when [true, B.nil?] then …
end

有什么建议吗?

1 个答案:

答案 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