为什么在使用Ruby解析文件时,常量不像局部变量那样初始化?

问题描述 投票:3回答:1

在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)
ruby scope
1个回答
0
投票

您永远不会分配常数!将您的代码与这个更扩展的示例进行比较:

if f
   A=5
   B=8
else
   A=9
   C=7
end

并且请记住,Ruby中的所有内容都是可执行代码;没有声明。现在,如果ftruthy,则创建常数AB,如果ffalsy,则获得常数A和C。

在您的代码中,您有一个if false,因此不会创建该常数。

顺便说一句,constant一词是IMO的误称,因为您可以更改常量(根据收到警告的方式来更改是否带有警告)。

© www.soinside.com 2019 - 2024. All rights reserved.