为什么Ruby中的后缀`if`如此奇怪

use*_*646 3 ruby if-statement

我在Ruby中有以下奇怪行为:

var1.zero? if var1 = 1
Run Code Online (Sandbox Code Playgroud)

NameErrorvar1main:Object的未定义局部变量或方法

从另一方面来说,如果我在standard中做同样的事情if,那么所有的工作都可以预期:

if var1 = 1
  var1.zero?
end
# => false
Run Code Online (Sandbox Code Playgroud)

任何人都可以描述ifRuby 后缀的工作方式吗?

ndn*_*kov 5

因为如果我问你

我女儿不可爱吗

你会打扰我

你有女儿吗

在我完成第一句话之前

我的女儿不是可爱,这是她的[显示图片]吗?


但是如果我问你

[显示图片]这是我的女儿,她可爱吗?

您可以轻松回应

没有


Par*_*gra 1

它将从左到右,首先读取var1.zero?,然后if var1 = 1

var1.zero? if var1 = 1
Run Code Online (Sandbox Code Playgroud)

这就是为什么它会得到var1

NameError:main:Object 的未定义局部变量或方法“var1”

和这里,

if var1 = 1
  var1.zero?
end
Run Code Online (Sandbox Code Playgroud)

var1 = 1将创建值为 1 的 var1,因此不会抛出错误。当它执行时var1.zero?.