簡體   English   中英

remove_const和模塊的名稱

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM