[英]remove_const and module's name
在remove_const
標准Ruby文檔中 ,我注意到以下這一行:
如果該常量引用模塊,則不會更改該模塊的名稱,並可能導致混淆。
這是什么意思? 刪除/卸載常量與模塊名稱有什么關系? 這指的是什么混亂?
當使用名稱A
定義模塊時,
module A; end
a = A
然后其名稱為"A"
,因此您可以將其稱為A
(以其名稱):
a.name # => "A"
A # => A
但是,如果您未定義A
:
self.class.send(:remove_const, :A)
那么您將無法再呼叫A
:
A # >> NameError: uninitialized constant A
但其名稱仍為"A"
:
a.name # => "A"
a # => A
那可能就是混淆。
首次將模塊分配給常數時,將自動設置模塊的名稱。 但是,未分配模塊時不會自動取消設置 。 這可能會造成混淆。
看到:
a = Module.new
a.name #=> nil
a.to_s #=> '#<Module:0x00007f91b38625f8>'
a.inspect #=> '#<Module:0x00007f91b38625f8>'
A = a
a.name #=> 'A'
a.to_s #=> 'A'
a.inspect #=> 'A'
B = a
B.name #=> 'A'
B.to_s #=> 'A'
B.inspect #=> 'A'
self.class.send(:remove_const, :A)
a = nil
B.name #=> 'A'
B.to_s #=> 'A'
B.inspect #=> 'A'
現在,您只能通過常量B
引用該模塊,但是該模塊的名稱仍為A
,這是它被分配給它的第一個常量。 刪除常數不會更改和/或刪除模塊的名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.