如果我的 case 语句的任何分支被调用,我可以设置一个变量吗?

Can I set a variable if any branch of my case statement is called?

我正在使用 Ruby 2.4。我有一个案例陈述

        case var1
        when cond1
          # do stuff
        when cond2
          # do stuff
        ...
        end

如果调用了任何 "when" 语句,我想设置一个变量 "condition_called = true",否则将该变量保留为 false。除了添加

之外还有什么方法可以做到这一点
condition_called = true

在我的案例陈述的每个分支中?

一个解决方案可能是

condition_called = true
case var1
when cond1
  # do stuff
when cond2
  # do stuff
else
  condition_called = false
end

显然,现在您无法判断是否触发了 else 语句,但它会告诉您是否触发了 when 语句。

有关 Ruby case 的更多信息:http://www.techotopia.com/index.php/The_Ruby_case_Statement

关于 Ruby case 语句要记住的一件事是 return 值。如果您可以保证您的每个子句 return 都是 真实的 ,而不是 nilfalse,那么您可以依赖于该行为:

condition_called =
  case ...
  when ...
    f(a)
  when ...
    g(b)
  end

只要你从这些不同的操作中得到结果,这就非常无缝了。