Sau*_*nda 1 ruby module constants
在的标准 Ruby 文档remove_const中,我注意到这一行:
如果该常量引用了一个模块,则这不会更改该模块的名称,并且可能会导致混乱。
这是什么意思?删除/卸载常量与模块名称有什么关系?这是指什么样的混乱呢?
当使用名称定义模块时A,
module A; end
a = A
Run Code Online (Sandbox Code Playgroud)
那么它的名字是"A",所以你可以这样称呼它A(通过它的名字):
a.name # => "A"
A # => A
Run Code Online (Sandbox Code Playgroud)
但如果你取消定义A:
self.class.send(:remove_const, :A)
Run Code Online (Sandbox Code Playgroud)
那么你就不能再打电话A了:
A # >> NameError: uninitialized constant A
Run Code Online (Sandbox Code Playgroud)
但其名称仍为"A":
a.name # => "A"
a # => A
Run Code Online (Sandbox Code Playgroud)
这大概就是所谓的迷惑吧。
| 归档时间: |
|
| 查看次数: |
1002 次 |
| 最近记录: |