我有一个数组,如果我在其中找到一个值,我想执行一个代码块。此外,如果数组为nil,我想执行该块。所以我尝试的代码是:
if !array.respond_to? :index || array.index(str)
#some code
所以如果它是零则是真的,或者如果str在数组中的某个位置,那是真的,对吧?但是如果它在索引0处找到该项,则它不会进入该块。另外,根据irb false || 0
评估0
。 WTF?我认为一切都是真的,除了假和零。我想||做了一些奇怪的事我不期待??
我的问题是:发生了什么事?编写满足我想要的条件的好方法是什么?
答案 0 :(得分:2)
if array.nil? || array.member?(s)
# ...
false || 0
评估为0
,因为它是or
。虚假不是真正的(显然;),但是0,所以表达是真实的。
答案 1 :(得分:2)
答案 2 :(得分:0)
您要检查nil数组还是空数组?如果你已经声明了数组,即使它是空的也不会是nil。我会这样写:
if array.empty? || array.include(str)
或者如果你真的想检查一个nil数组:
if array.nil? || array.include(str)
我使用.include而不是.index来避免得到0。
答案 3 :(得分:0)
if array.nil? || array.member?(str)
#code block
end
||操作员几乎提醒你一个合并。
给定a = false,b =:bacon
return a || b #returns :bacon