加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

带有多个变量的Ruby case语句

发布时间:2020-12-16 22:54:45 所属栏目:百科 来源:网络整理
导读:Ruby有一个相当强大的case..when..else构造,用于何时需要将条件与单个变量匹配.在不简单地嵌套case语句的情况下,将标准与多个变量匹配的“规范”方法是什么? 在数组中包装多个变量(如[x,y])并与之匹配并不等效,因为Ruby不会将魔法case ===运算符应用于数组
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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读