我使用if和除非
以下示例代码if key.start_with('abc')
do something
end
unless key.start_with('abc')
do that
end
这是将if和除非或是否有其他方式结合起来的正确方法?
if key.start_with('abc')
do something
elsif !key.start_with('abc')
do that
else
do this
end
由于
答案 0 :(得分: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)
等等
答案 1 :(得分:1)
您可能在此处混淆条款。在Ruby中,unless
相当于if !condition
。
如果您想确保根据单个条件发生或不发生某些事情,您需要检查的是那个条件。在您的示例中,它将是:
if key.start_with('abc')
do something
else
do that
end
key.startWith('abc')
是真还是假。没有理由检查额外的false语句,因为在执行后必须为假。
答案 2 :(得分:1)
查看红宝石样式指南: https://github.com/bbatsov/ruby-style-guide#no-else-with-unless
对于大多数控制流程案例,我会远离unless
,因为它会很快变得混乱,除了以下内容:
do that unless key.start_with('abc')
return unless key.start_with('abc')