假设我有一个课程Test
class Test
def initialize()
puts "cool"
end
end
是否可以通过某种方式扩展初始化类并在其中执行某些方法?
例如,我要:
class Test
def func()
puts "test"
end
end
test = Test.new()
应该输出
cool
test
谢谢!
答案 0 :(得分:3)
您可以定义一个包含扩展名的模块:
module TestExtension
def initialize
super
puts 'test'
end
end
,然后prepend
该模块到Test
:
class Test
def initialize
puts 'cool'
end
end
Test.prepend(TestExtension)
Test.new
# cool
# test
答案 1 :(得分:2)
如果Test
的代码不受您控制,并且您想注入test
:
Test.class_eval do
def test
puts "TEST"
end
alias initialize_without_test initialize
# This, if you want the return value of `test` to replace the original's
def initialize(*args, &block)
initialize_without_test(*args, &block)
test
end
# Or this, if you want to keep the return value of original `initialize`
def initialize(*args, &block)
initialize_without_test(*args, &block).tap do
test
end
end
end