2013-11-04 94 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钩子之类的东西之前,先使用该语言的基本功能并熟悉它们。