我已经厌倦了在我的课程的freeze
方法的末尾添加initialize
,如下所示:
class Foo
def initialize
# some stuff
freeze
end
end
我想默认为任何对象执行此操作。我想在BasicObject#initialize
类中覆盖Object
,它提供方法freeze
,但我不知道如何。
答案 0 :(得分:2)
既然你问了这个问题......
您可以通过猴子修补和alias_method
链接
$ irb
irb(main):001:0> class Object
irb(main):002:1> alias_method :old_init, :initialize
irb(main):003:1>
irb(main):004:1* def initialize
irb(main):005:2> old_init
irb(main):006:2> self.freeze
irb(main):007:2> end
irb(main):008:1> end
(irb):4: warning: redefining Object#initialize may cause infinite loop
那说;这绝对是一个糟糕的主意,我怀疑它会打破一些核心Ruby功能。请注意,即使irb说,“哇!不要这样做”=> warning: redefining Object#initialize may cause infinite loop
定义从Object扩展的自己的类会更好一点;定义一个新版本的初始化,调用对象的初始化,然后调用冻结。从那里你可以让你的类继承自这个子类。