执行脚本时始终只调用一次函数

时间:2014-05-06 22:17:40

标签: ruby-on-rails ruby ruby-on-rails-4 ruby-2.0

我下面有一个类似这样的课程。我介绍了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

1 个答案:

答案 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