2013-11-04 93 views
-1

假設我有一些如何訪問當前實例方法包括模塊

class Generator 
     attr_accessor :param1 
     attr_accessor :param2 

     def initialize(param1, param2) 
      @param1 = param1 
      @param2 = param2 
     end 
     include Command 

Command

module Command 
    extend ActiveSupport::Concern 

     def self.included(klass) 
     @path ||=klass.new(@param1,@param2) unless (@param1.nil? && @@param2.nil?) 
     end 

假設我創造一些Generator.new(param1,param2),然後@參數1和模塊包括當@param2是零。如何在included方法中獲得這些值?

+0

這個邏輯對我來說並不完全合理。看起來你想在初始化時設置'@ path'實例變量來指向同一個類的另一個實例(並且做錯了引導)。那是你想要做的嗎?爲什麼?此外,你有一個錯字 - '@@ param2'而不是'@ param2'。 – PinnyM

+1

我不明白你想要做什麼。如果你想設置'Generator'實例的'@ path'實例變量,那麼你做錯了。 –

+0

@MarekLipka事實上,我有幾個包含命令的類,我希望他們每個人都共享'path'實例 – user1611830

回答

3

看來你並不清楚一些事情。你initialize方法可能是爲了說:

@param1 = law 
@param2 = current_user 

但除此之外,似乎你不明白什麼是included鉤子,當它被調用。當執行Generator中的include Command行時,您的included掛鉤只會被調用一次。當您創建新的GeneratorGenerator.new(param1,param2)時,您的included掛鉤已被調用,不會再被調用。

作爲一個友好的建議,如果您是Ruby的初學者,我建議您在嘗試使用諸如included鉤子之類的東西之前,先使用該語言的基本功能並熟悉它們。