我有以下逻辑:
if something == 'some string'
somevar1 = 'some extra extra extra extra extra extra long string'
elsif !somevar
somevar1 = 'a much longer string a much longer string'
somevar2 = 'some very very very long string'
end
现在我的问题是根据我读过的文件,条件中的第二次检查似乎不是惯用的。
但是,我必须在条件中执行第一次检查。
我读到的所有内容都声明使用'除非'但除非是不好的做法。所以我想在这里寻找最完美的解决方案。
提前多多谢谢!
答案 0 :(得分:2)
我一直有同样的问题,但我会抛弃我的想法。
关于unless
与else
的使用,不好的做法是:
unless condition
# stuff1
else
# stuff2
end
这是一种不好的做法,因为正如您可能猜到的那样,您可以用更好,更逻辑合理和清晰的方式编写它:
if condition
stuff2
else
stuff1
end
更好,对吧?
然而,在像你这样的情况下,你无法翻转条件。因此,如果你想使用unless
,你将会这样使用它:
if something == 'some string'
somevar1 = 'some extra extra extra extra extra extra long string'
else
unless somevar
somevar1 = 'a much longer string a much longer string'
somevar2 = 'some very very very long string'
end
end
这在可读和逻辑上是合理的。
但是,如果您对somevar
的类型有明确的了解,并且当它变为 false 时,您最好坚持使用somevar.false?
之类的方法。当然,据我所知,对于所有对象都没有这样的false?
方法,因此您可能希望使用nil?
或/和类似的东西。
if something == 'some string'
somevar1 = 'some extra extra extra extra extra extra long string'
elsif somevar.nil?
somevar1 = 'a much longer string a much longer string'
somevar2 = 'some very very very long string'
end
例如,对于字符串,您可以添加.empty?
检查是否适合您:
if something == 'some string'
somevar1 = 'some extra extra extra extra extra extra long string'
elsif somevar.nil? or somevar.empty?
somevar1 = 'a much longer string a much longer string'
somevar2 = 'some very very very long string'
end
当然,当您需要特定类型的支票时,您应该考虑使用!=
,而不仅仅是“如果不是”类型。