假設我們有這樣的Ruby類:存儲Ruby Class Singleton常量的位置?
class MyClass
class << self
MC_CONST = 30
end
end
那麼,讓我們來實例化MyClass
和另一個常量添加到對象的元類:
m = MyClass.new
class << m
OBJ_MC_CONST = 50
end
有與對象的單身常數沒有任何問題:
m.singleton_class::OBJ_MC_CONST # => 50 <-- [OK]
m.singleton_class.constants.include? :OBJ_MC_CONST # => true <- [OK]
但並不完全是我期望與班級單身常數:
MyClass.singleton_class::MC_CONST # => 30 <-- [OK]
MyClass.singleton_class.const_get :MC_CONST # => 30 <-- [OK]
MyClass.singleton_class.constants.include? :MC_CONST # => false <-- [Why???]
爲什麼地球上的.constants
方法在元類MyClass
上返回的類不包含:MC_CONST?我在這裏錯過了什麼?
謝謝。
編輯1:但這似乎是在MRI 2.x中的錯誤畢竟。我已經向Ruby核心團隊提出了一個新問題:https://bugs.ruby-lang.org/issues/9413來解決這個問題。
編輯2:這個bug顯然已經固定在https://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/44628/diff/
感謝您的輸入。我確實似乎是當前MRI的一個缺陷。我已經向Ruby核心團隊提出了一個新問題。我將用問題URL更新描述。 – demisx