2014-05-06 106 views
1

我有一個類如下所示的類。我介紹了loghelper函數來創建必要的日誌元素。執行腳本時總是隻能調用一次函數

所有3個功能(開始,功能1,功能2)可以通過控制檯rails r "Foo.start seperately

我在尋找一個完美的解決方案,以確保@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

'@Logger || = Logger.new(標準輸出)' - 現在也沒關係,它只是會創建一次記錄。 –

+0

'loghelper'函數中還有更多的東西正在發生。沒有更優雅的解決方案嗎? 此外,您在評論中描述的這個運算符是什麼? – Hedge

+0

添加初始化方法,將類方法轉換爲對象方法幷包含單例。這屬於codereview,而不是stackoverflow。 – fotanus

回答

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