4

我正在寻找一个跳过when块执行的语句,类似于breakfor 循环。这可能吗?

我要避免的是这样的结构:

case n
  when 1
    if valid
      foo.bar
    end
  when 2
    if valid
      foo.foo
  end

更理想的代码块如下所示:

case n
  when 1
    break unless valid
    foo.bar
  when 2
    break unless valid
    foo.foo
  end

显然,break行不通。

4

3 回答 3

6

等效但更简洁:

case n
  when 1
    foo.bar if valid
  when 2
    foo.foo if valid
  end
end

如果条件真的适用于所有情况,您可以事先检查:

if valid
  case n
    when 1
      foo.bar
    when 2
      foo.foo
    end
  end
end

break如果两者都不适合你,那么简短的回答:不,在 ruby​​ 的 case 语句中没有等价物。

于 2012-11-03T15:07:46.380 回答
2

我一直喜欢在 ruby​​ 语句的末尾添加条件。它使代码更容易和更易读。这就是红宝石的著名之处。我对您的问题的回答如下所示:

case n
when 1
    foo.bar
when 2
    bar.foo
end unless !valid
于 2012-11-03T23:14:01.323 回答
0

What I did in one case, which might be applicable to your case is encapsulating in a loop;

loop do
  case variable
  when conditionalA
    block1
    next if anotherconditional
    blockX
  when conditionalB
    block2
    next if anotherconditional
    blockY
  end
end

Though not sure if this is "fine art".

于 2019-12-01T12:59:22.580 回答