我有以下逻辑:
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
现在我的问题是,根据我阅读的文档,条件中的第二次检查似乎不是惯用的。
但是,我必须在条件中执行第一次检查。
我读到的所有内容都说使用"除非",但除非不是好的做法。所以我试图在这里寻找完美的解决方案。
提前非常感谢!
我一直有同样的问题,但我会抛弃我的想法。
关于将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
的类型有一个清晰的想法,并且当它变为错误时,您最好坚持使用类似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
而且,当然,当您需要特定类型的检查时,您应该考虑使用!=
,而不仅仅是"如果不是"类型。