为什么`z || y == 0`没有返回我的期望?

时间:2014-06-21 09:05:24

标签: ruby variables if-statement

所以我在Codecademy学习Ruby课程并编写了这段代码

z = 39
y = 39

if z && y != 39
    print "God if it prints this, this code will be a failure!"
elsif z || y == 0
    print "dont print this code"
else
    print "Success!"
end

由于某种原因,它运行elsif并说"不打印此代码" 有人可以向我解释这个吗?

2 个答案:

答案 0 :(得分:5)

这里有两件事要理解:如何&&工作以及Ruby如何将对象转换为true / false。

如何&&工作原理:

你写道:

if z && y != 39

你希望Ruby能像这样解释:

if (z != 39) && (y != 39)

但实际上Ruby会像这样解释它:

if (z) && (y != 39)

将对象转换为true / false

任何非nil或false的Ruby对象都将计算为true。所以在你的情况下,我们有:

if z && y != 39

这是:

if true && false # z is not nil, so true, and y == 39 so the second part is false

当然评价为假。

然后

if z || y == 0

这是:

if true || false # z is still not nil, y != 0 so the second part is false

true || false评估为true,因此"不打印此代码"输出。

答案 1 :(得分:1)

因为作为对象的z不会被false视为z=39,因此未设置为boolean字面值falsenil }

对于Ruby,任何非nil或任何设置为boolean文字值false的对象都会在返回true类型值的表达式中返回boolean