2015-09-29 73 views
-1

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

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 
+1

'回文?( “ABC”)''返回FALSE','假== FALSE'是'真',是什么奇怪的行为???? – xdazz

+0

我试过了,但输出没有检出:'回文?(“abc”)== false:true ' – Deterius

回答

3

由于Ruby方法将返回执行结果最后的表达。对于这个if声明:

if rev == string 
    true 
end 

它将返回nil如果rev != string

0

其实,你的第一个功能是产生正确的结果。问题是第二个公式。如果字符串不是回文,它将不返回;如果字符串是回文,它只返回true。因此,

palindrome?("abc") == false 

第二个公式返回false因为palindrome?("abc")回报什么,因为​​不是一个回文,所以它不等于false

+0

“nothing”实际上是:'nil' – Stefan

0

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

+0

添加到此答案:根据问题的内容,您正在检查“回文?(字符串)==虚假”。如果函数返回false,因为'假==虚假#=> TRUE'这将返回TRUE;。只需运行“回文?(字符串)”即可得到实际的输出。 – Arc676