我正在寻找一个跳过执行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
不起作用。
答案 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
尽管不确定这是否是“美术”。