Ruby 为什么这个if语句返回'true'?

Ruby 为什么这个if语句返回'true'?,ruby,Ruby,我的customer.id等于171。在执行以下if-语句之后,它立即返回“customer.id=0”: 有人能解释为什么会这样吗?在Ruby中使用==执行相等性测试。您正在进行赋值: if customer.id = 0 应该是: if customer.id == 0 Ruby认为false和nil是仅有的两个“假”值,而其他所有值都是“真”。根据定义,这是不能修改的(至少在MRI中)。此定义用于所有内置运算符,如if、除非、while、until、cond?如果你是真的:如果你是假的

我的
customer.id
等于
171
。在执行以下
if
-语句之后,它立即返回
“customer.id=0”


有人能解释为什么会这样吗?

在Ruby中使用==执行相等性测试。

您正在进行赋值:

if customer.id = 0
应该是:

if customer.id == 0

Ruby认为
false
nil
是仅有的两个“假”值,而其他所有值都是“真”。根据定义,这是不能修改的(至少在MRI中)。此定义用于所有内置运算符,如if、除非、while、until、cond?如果你是真的:如果你是假的,&&&&

写作时

if customer.id = 0  # customer.id = 0 will return 0
...
end

if 0 # and 0 is truthy
...
end

您正在使用赋值运算符
=
而不是比较运算符
=
。您在问题“if-语句返回
true
”中的假设是错误的。它不返回
true
,而是返回一个truthy值。这就是为什么我开始使用yoda条件(
如果0==customer.id
),而您不能mistaken@shivam谢谢我意识到了这一点,然后回到这里为用愚蠢的问题浪费人们的时间而道歉。谢谢。@user3385136无需道歉。偶尔犯愚蠢的错误是一种健康的人类行为
if 0 # and 0 is truthy
...
end