在Ruby中,我知道我可以做这样的事情:
if false
var = "Hello"
end
puts var
应用程序不会崩溃,并且var
仅设置为nil
。我已经读到,发生这种情况是由于Ruby解析器的工作方式。
为什么对常量不起作用?
if false
MY_CONST = "Hello"
end
puts MY_CONST
=> uninitialized constant MY_CONST (NameError)
您永远不会分配常数!将您的代码与这个更扩展的示例进行比较:
if f
A=5
B=8
else
A=9
C=7
end
并且请记住,Ruby中的所有内容都是可执行代码;没有声明。现在,如果f
为truthy,则创建常数A
和B
,如果f
为falsy,则获得常数A和C。
在您的代码中,您有一个if false
,因此不会创建该常数。
顺便说一句,constant一词是IMO的误称,因为您可以更改常量(根据收到警告的方式来更改是否带有警告)。