
夠用的 Ruby
|
15
刪除常數
以 IRB 探索 Ruby 的功能時,要求 Ruby 完全忘掉常數,是一件很務實的事情;尤其試
想這種情況:如果我們不想猴子修補,而想要從新定義類別或模組,但它們的名稱卻
剛好又是常數的名稱。傳送訊息
remove_const
到
Object
,並將常數名稱當作符號加以傳
遞,就可以刪除頂層常數:
>> NUMBERS.last
=> 42
>> Object.send(:remove_const, :NUMBERS)
=> [4, 8, 15, 16, 23, 42]
>> NUMBERS.last
NameError: uninitialized constant NUMBERS
>> Greetings::GERMAN
=> "guten Tag"
>> Object.send(:remove_const, :Greetings)
=> Greetings
>> Greetings::GERMAN
NameError: uninitialized constant Greetings
我們必須以
Object.send(:remove_const, :
NAME
)
代替
Object.remove_ const(:
NAME
)
,因為
remove_const
是私用方法,一般只能從
Object
類別本身內部傳送訊息來呼叫,而使用
Object.send
能讓我們暫時忽略這項限制。