我遇到了布尔预期行为的问题。我可以做出理想的结果,但我不确定为什么会出现奇怪的行为。这会产生错误的结果:
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
答案 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}}。