我希望在运行任何其他静态方法之前运行一段代码,是否可以按照以下精神做一些事情?
class MyClass
def self.initialize
@stuff = 1
end
def self.print_stuff
puts @stuff
end
end
我感兴趣的Ruby版本是2.3。
答案 0 :(得分:1)
Ruby中的每一块代码都是一个表达式。甚至类定义也是一系列表达式:方法定义是具有将方法添加到类的副作用的表达式。
这就是元编程方法的工作原理。 attr_reader
是一个私有方法调用,其中隐式self
是类。所以,长话短说,你不限制在一个类体内,你可以在课堂上下文中放置你想要运行的代码:
class MyClass
@stuff = 1
def self.print_stuff
puts @stuff
end
end
答案 1 :(得分:0)
没有明确的元类初始化器这样的东西。类本身在定义时被“初始化”,因此完全有效:
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中定义一个类涉及向正确的上下文对象发送一堆消息(方法调用),例如正在定义的类本身。