Ruby Newbie:对布尔逻辑感到困惑

时间:2011-11-02 19:43:49

标签: ruby boolean-logic

我有一个数组,如果我在其中找到一个值,我想执行一个代码块。此外,如果数组为nil,我想执行该块。所以我尝试的代码是:

if !array.respond_to? :index || array.index(str)
  #some code

所以如果它是零则是真的,或者如果str在数组中的某个位置,那是真的,对吧?但是如果它在索引0处找到该项,则它不会进入该块。另外,根据irb false || 0评估0。 WTF?我认为一切都是真的,除了假和零。我想||做了一些奇怪的事我不期待??

我的问题是:发生了什么事?编写满足我想要的条件的好方法是什么?

4 个答案:

答案 0 :(得分:2)

if array.nil? || array.member?(s)
    # ...

false || 0评估为0,因为它是or。虚假不是真正的(显然;),但是0,所以表达是真实的。

答案 1 :(得分:2)

nil?include?与内联if一起使用对我来说似乎最惯用。

#your code if arr.nil? || arr.include?(str)

答案 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