带有多个变量的Ruby case语句

前端之家收集整理的这篇文章主要介绍了带有多个变量的Ruby case语句前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_0@
Ruby有一个相当强大的case..when..else构造,用于何时需要将条件与单个变量匹配.在不简单地嵌套case语句的情况下,将标准与多个变量匹配的“规范”方法是什么?

在数组中包装多个变量(如[x,y])并与之匹配并不等效,因为Ruby不会将魔法case ===运算符应用于数组的元素;运算符仅适用于数组本身.

我将继续前进并回答社区维基的回答,并在这个问题上进行了(击败).

解决方法

这是添加===的简单方法
  1. class Array
  2. def ===(other)
  3. return false if (other.size != self.size)
  4.  
  5. other_dup = other.dup
  6. all? do |e|
  7. e === other_dup.shift
  8. end
  9. end
  10. end
  11.  
  12. [
  13. ['foo',3],%w[ foo bar ],%w[ one ],[]
  14. ].each do |ary|
  15.  
  16. ary_type = case ary
  17. when [String,Fixnum] then "[String,Fixnum]"
  18. when [String,String] then "[String,String]"
  19. when [String] then "[String]"
  20. else
  21. "no match"
  22. end
  23.  
  24. puts ary_type
  25.  
  26. end
  27.  
  28. # >> [String,Fixnum]
  29. # >> [String,String]
  30. # >> [String]
  31. # >> no match

猜你在找的Ruby相关文章