相当于ruby的case / when语句中的`break`?

时间:2012-11-03 15:01:05

标签: ruby

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

我想要避免的是一个类似的结构:

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不起作用。

3 个答案:

答案 0 :(得分: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等价物。

答案 1 :(得分:2)

我总是喜欢在ruby语句的末尾添加条件。它使代码更容易,更易读。这就是红宝石所知道的。我对你的问题的回答看起来像这样:

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

答案 2 :(得分:0)

我在一种情况下所做的(可能适用于您的情况)是封装在一个循环中;

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

尽管不确定这是否是“美术”。