Ruby有一个相当强大的case..when..else构造,用于何时需要将条件与单个变量匹配.在不简单地嵌套case语句的情况下,将标准与多个变量匹配的“规范”方法是什么?
在数组中包装多个变量(如[x,y])并与之匹配并不等效,因为Ruby不会将魔法case ===运算符应用于数组的元素;运算符仅适用于数组本身.
我将继续前进并回答社区维基的回答,并在这个问题上进行了(击败).
解决方法
这是添加===的简单方法:
class Array def ===(other) return false if (other.size != self.size) other_dup = other.dup all? do |e| e === other_dup.shift end end end [ ['foo',3],%w[ foo bar ],%w[ one ],[] ].each do |ary| ary_type = case ary when [String,Fixnum] then "[String,Fixnum]" when [String,String] then "[String,String]" when [String] then "[String]" else "no match" end puts ary_type end # >> [String,Fixnum] # >> [String,String] # >> [String] # >> no match