Time to Read
10分
Module#remove_const を使う。
こういう感じで使う。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | class User attr_accessor :id, :name end #=> nil u = User.new #=> #<User:0x7fde6b4446b0> u.id = 1 #=> 1 u.name = "hoge" #=> "hoge" u #=> #<User:0x7fde6b4446b0 @name="hoge", @id=1> module NewNameSpace # dupしないと、クラス名が「User」のままになる User = ::User.dup end #=> NewNameSpace::User u = NewNameSpace::User.new #=> #<NewNameSpace::User:0x7fde6b40b220> u.name = "hoge" #=> "hoge" u #=> #<NewNameSpace::User:0x7fde6b40b220 @name="hoge"> # remove_constはprivate methodなので、こう使う Object.class_eval { remove_const :User } #=> User u = NewNameSpace::User.new #=> #<NewNameSpace::User:0x7fde6b4dc870> u = User.new # NameError: uninitialized constant User class User attr_accessor :new_id, :new_name end => nil u = User.new #=> #<User:0x7fde6b448800> u.name # NoMethodError: undefined method `name' for #<User:0x7fde6b448800> u.new_name = "xxx" #=> "xxx" |
プラグインとかエクステンション的なものを作る際に有効かもしれません。
組み込みのクラスは、remove_constできません。




