我下面有一个类似这样的课程。我介绍了loghelper函数来创建必要的日志元素。
所有3个功能(start,function1,function2)都可以通过控制台与rails r "Foo.start
单独运行
我正在寻找一个优雅的解决方案,以确保在执行任何其他三个功能之前创建@logger,并且只创建一次。
class Foo
def self.loghelper
@logger = Logger.new(stdout)
end
def self.start
self.loghelper
self.function1
self.function2
end
def self.function1
self.loghelper
@logger.info 'function1 foo'
end
def self.start
self.loghelper
@logger.info 'function2 bar'
end
end
答案 0 :(得分:2)
这就是你封装实例变量的原因
class Foo
def self.logger
@logger ||= begin
[...]
Logger.new(stdout)
end
end
def self.start
function1
function2
end
def self.function1
logger.info 'function1 foo'
end
def self.start
logger.info 'function2 bar'
end
end