布尔表现奇怪,逻辑问题

时间:2015-09-29 03:21:15

标签: ruby if-statement boolean

我遇到了布尔预期行为的问题。我可以做出理想的结果,但我不确定为什么会出现奇怪的行为。这会产生错误的结果:

def palindrome?(string)
  rev = string.reverse
  if rev == string
    true
  else
    false
  end
end

palindrome?("abc") == false # => true
palindrome?("abcba") == true # => true
palindrome?("z") == true # => true

虽然这会产生正确的结果:

def palindrome?(string)
  rev = string.reverse
  if rev == string
    true
  end
end

palindrome?("abc") == false # => false
palindrome?("abcba") == true # => true
palindrome?("z") == true # => true

以下内容可能类似:

def nearby_az(string)
  counter = 0
  string = string.split("")
  if string.count == 1
    false
  elsif (string.index("z") - string.index("a")) <= 3
    true
  else
    false
  end
end

nearby_az("a") == false # => true
nearby_az("z") == false # => true

3 个答案:

答案 0 :(得分:3)

因为Ruby方法将返回执行最后一个表达式的结果。对于此if声明:

if rev == string
    true
end

如果nil,它将返回rev != string

答案 1 :(得分:0)

实际上,您的第一个功能是产生正确的结果。问题是第二个公式。如果字符串不是回文,则不返回任何内容;如果字符串是回文,它只返回true。因此,

palindrome?("abc") == false
第二个等式的

返回false,因为palindrome?("abc")没有返回任何内容,因为"abc"不是回文,因此它不等于false

答案 2 :(得分:0)

nil的第二个实现如果不是回文,将返回nil == false # => false。因此nil。在Ruby中,所有函数都返回一些东西,尽管它可能是{{1}}。