不在ruby条件中使用的惯用方式(替代ElsInspect)

不在ruby条件中使用的惯用方式(替代ElsInspect),ruby,conditional-statements,control-flow,Ruby,Conditional Statements,Control Flow,我有以下逻辑: 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 现在我的问题是,根据我阅读的文档,条件中

我有以下逻辑:

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
现在我的问题是,根据我阅读的文档,条件中的第二个检查似乎不是惯用的

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

我读到的所有内容都说明使用“除非”,但除非中的其他内容不是好的做法。因此,我试图寻找什么是完美的解决方案


非常感谢

我总是有同样的问题,但我会抛开我的想法

关于
的使用,除非
else
一起使用,不好的做法是:

unless condition
  # stuff1
else
  # stuff2
end
这是一种不好的做法,因为正如您可能猜到的那样,您可以用一种更好、逻辑上更合理、更清晰的方式来编写它:

if condition
  stuff2
else
  stuff1
end
更好,对吧

然而,在像你这样的情况下,你不能改变条件。因此,如果您想使用
,除非
,您将像这样使用它:

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?
like方法。当然,就我所知,对于所有对象都没有这样的
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

当然,你应该考虑使用<代码>!=
当您需要特定类型的检查时,不仅仅是“if not”类型。

elsif somevar.nil?
work?@PhilipHallstrom,除非
somevar==false
例如
false.nil?#=>错误
。我不确定问题出在哪里
的意思是如果您愿意,您可以使用
not(somevar)
,但实际上我从未见过在实践中使用它。谢谢phil。。我习惯于使用非python bg,但我认为==false和false.nil?或者正是我想要的。我见过的每一个ruby成语都说不要使用!值,所以我试图找到ruby处理这个问题的方法。谢谢大家!@用户2152283你能分享这个写着
的网站吗!值
不正确?我可以看到深入到双重否定,如
除非!value
不是一个好主意,但我看不出
elsif有什么问题!somevar
,如果这是最有意义的。是链接。请参阅测试真值。我在几本书中也看到了这一点。