gpt4 book ai didi

ruby - 在初始化方法之后运行方法

转载 作者:数据小太阳 更新时间:2023-10-29 07:48:00 26 4
gpt4 key购买 nike

我想编写一些在调用初始化方法后运行的 ruby​​ 代码。此代码可以在类或模块中。我该怎么写?

这是我想要的示例:

class Base
def after_init
puts "after init"
end

class A < Base # Option 1, use a class
end

class B < Base
def initialize
puts "in init"
end
end

module MyMod
def after_init
puts "after init"
end
end

class C
include Module
end

$> A.new
=> "after init"
$> B.new
=> "in init"
=> "after init"
$> C.new
=> "after init"

我绝对不想做的是显式调用 super。有没有办法做到这一点?我不在乎它是否使用了很多 Ruby 的反射能力。谢谢!

最佳答案

class Base
def after_init
puts "Base#after_init"
end

def self.inherited(klass)
class << klass
alias_method :__new, :new
def new(*args)
e = __new(*args)
e.after_init
e
end
end
end
end

module MyMod
def after_init
puts "MyMod#after_init"
end
def self.included(klass)
class << klass
alias_method :__new, :new
def new(*args)
e = __new(*args)
e.after_init
e
end
end
end
end

class A < Base
end

class B < Base
def initialize
puts "B#initialize"
end
end

class C
include MyMod
def initialize
puts "C#initialize"
end
end

A.new
B.new
C.new

关于ruby - 在初始化方法之后运行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23075010/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com