惯用方式,不在红宝石条件(替代 elsunless)



我有以下逻辑:

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

现在我的问题是,根据我阅读的文档,条件中的第二次检查似乎不是惯用的。

但是,我必须在条件中执行第一次检查。

我读到的所有内容都说使用"除非",但除非不是好的做法。所以我试图在这里寻找完美的解决方案。

提前非常感谢!

我一直有同样的问题,但我会抛弃我的想法。

关于将unlesselse一起使用,不好的做法是这样的:

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

而且,当然,当您需要特定类型的检查时,您应该考虑使用!=,而不仅仅是"如果不是"类型。

相关内容

  • 没有找到相关文章

最新更新