Это можно сделать, но я понятия не имею, почему вы хотите это сделать.
module A
class B
def greeting
puts "hi within #{self}"
end
end
puts "constants within A = #{constants}"
B.new.greeting
# <more code>
# lastly...
const_set(:B, nil)
end
отображает:
constants within A = [:B]
hi within #<A::B:0x00005b2a18ffc538>
warning: already initialized constant A::B
warning: previous definition of B was here
Затем,
A::B.new.greeting
NoMethodError (undefined method `new' for nil:NilClass)
При желании вы можете добавить '-W'
или -W0
в командную строку для подавления предупреждающих сообщений.
Я понимаю, что ActiveSupport
имеет метод Object :: remove_constant , позволяющий один для замены const_set(:B, nil)
(или const_set("B", nil)
) на:
Object.public_send(:remove_const, :B)
, что может быть предпочтительным.