Ruby 如果var=0.0,`p var`为什么会引发错误?

Ruby 如果var=0.0,`p var`为什么会引发错误?,ruby,Ruby,我最近被认为是一个很难编程的问题: 如果var=0.0,p var的输出是什么?(问号是代码的一部分) 我的假设是首先计算0.zero?,返回true,然后var=true,这将var设置为true,并返回true,因此p var if true将打印true 但事实并非如此。Ruby引发一个错误未定义的局部变量或方法'var'… p var if var = 0.zero? # => NameError: undefined local variable or method `var'

我最近被认为是一个很难编程的问题:

如果var=0.0,
p var的输出是什么?
(问号是代码的一部分)

我的假设是首先计算
0.zero?
,返回
true
,然后
var=true
,这将
var
设置为
true
,并返回
true
,因此
p var if true
将打印
true

但事实并非如此。Ruby引发一个错误
未定义的局部变量或方法'var'…

p var if var = 0.zero?
# => NameError: undefined local variable or method `var' for main:Object
from (irb):19
from /usr/bin/irb:11:in `<main>'

p var if var = (0.zero?)
# => true

p var if (var = 0).zero?
# => 0

p var if (var = 0.zero?)
# => true

p var if var = 0
# => (irb):23: warning: found = in conditional, should be == 0
如果var=0.0,则p var
?
#=>NameError:未定义的局部变量或main:Object的方法'var'
来自(irb):19
from/usr/bin/irb:11:in`'
如果var=(0.0?)则p var
#=>正确
如果(var=0)p var为零?
# => 0
如果(var=0.0?)p var
#=>正确
如果var=0,则p var
#=>(irb):23:警告:在条件中找到,应为==0
这里发生了什么事?

退房

局部变量是在解析器遇到 分配,而不是在分配发生时