2017-08-31 28 views
-1

我一直在使用下面的示例代码,如果结合和除非红宝石:如何在除非

if key.start_with('abc') 
    do something 
end 

unless key.start_with('abc') 
    do that 
end 

这既是如果,除非或有任何其他的方法结合起来的正确方法?

if key.start_with('abc') 
    do something 
elsif !key.start_with('abc') 
    do that 
else 
    do this 
end 

感谢

+3

在代码中你所示,第三分支(“做”)将永远不会达到。 –

回答

1

可能在这里混淆术语。在Ruby中,unless相当于if !condition

如果您想确保某件事情是基于单一条件发生或不发生,您需要检查的是条件。在你的例子中,它将是:

if key.start_with('abc') 
do something 
else 
    do that 
end 

key.startWith('abc')是真或假。没有理由检查额外的虚假陈述,因为必须在执行后为假。

+0

感谢和抱歉只是更新的问题。如果我有其他的陈述呢? –

+0

我的回答清楚地说明了这一点。一个布尔变量不能有三个条件。 – Makoto

1

如果检查if key.start_with('abc')失败,那么这意味着它不会与abc启动,因此没有必要检查该条件。他们是直接对立的,所以如果是真的,另一个是假的,因此,一个普通的if/else足够:

if key.start_with('abc') 
    do something 
else 
    do that 
end 

正如我在我的评论说,你如何设置if/elsif/else取决于你的条件是如何相互关联的。如果他们都是相互排斥的,那么它可以简单地是这样的:

if condition1 
    do first thing 
elsif condition2 
    do 2nd thing 
else 
    do fallback thing 
end 

不过,也有许多不同的方式,你可能要检查:

if condition1 
    do a thing 
elsif condition2 || condition3 
    do something if 1 is false, but either either 2 or 3 are true 
elsif condition4 
    do something if 1,2, & 3 are all false 
elsif condition5 && condition6 
    do something only if both 5 and 6 are true (and all above are false) 

等,等

+0

谢谢。如果我有其他的陈述呢?更新问题 –

+0

这取决于所有这些语句如何相关。你最初的问题是一个简单的互斥关系,但我们需要更多地了解附加条件。 – jfriesenhahn