如何在Ruby中重写元类构造函数
我希望在运行任何其他静态方法之前先运行一段代码,是否可以按照下面的精神执行某些操作如何在Ruby中重写元类构造函数,ruby,Ruby,我希望在运行任何其他静态方法之前先运行一段代码,是否可以按照下面的精神执行某些操作 class MyClass def self.initialize @stuff = 1 end def self.print_stuff puts @stuff end end 我感兴趣的Ruby版本是2.3。没有显式元类初始值设定项。该类本身是按定义“初始化”的,因此这样做完全有效: class MyClass # Code here will be executed a
class MyClass
def self.initialize
@stuff = 1
end
def self.print_stuff
puts @stuff
end
end
我感兴趣的Ruby版本是2.3。没有显式元类初始值设定项。该类本身是按定义“初始化”的,因此这样做完全有效:
class MyClass
# Code here will be executed as the class itself is defined.
@stuff = 1
def self.print_stuff
puts @stuff
end
end
MyClass.print_stuff
请记住,
def
本身是一种方法调用形式,在Ruby中定义类需要向适当的上下文对象发送一系列消息(方法调用),例如所定义的类本身。Ruby中的每个代码块都是一个表达式。甚至一个类定义也是一系列表达式:方法定义是具有将方法添加到类中的副作用的表达式
这就是元编程方法的工作原理attr\u reader
是一个私有方法调用,其中隐式的self
是类。因此,长话短说,您不受类主体的限制,您可以在类的上下文中运行任何代码:
class MyClass
@stuff = 1
def self.print_stuff
puts @stuff
end
end
用简单的
@stuff=1
替换方法MyClass::initialize
。当解析类定义时,类实例变量@stuff
被赋值为1
。我认为元编程标签在这里不合适。如果你发明了自己的术语而没有定义它,那么很难弄清楚你在问什么。Ruby中没有静态方法,Ruby也没有构造函数。