Ruby范围位于模块的底层

时间:2015-03-08 17:57:14

标签: ruby scope

我找不到任何对此有意义的解释。

我试图找出如何访问我在模块中创建的变量,但不是在任何类中,即:

module Moddy

attr_accessor :var

var = "wibble"

  class Squiggy

    def Class_Method ()

    end

  end

end

我正试图弄清楚如何(如果可能的话)从'Squiggy'范围内以及需要Moddy的脚本范围内访问'var'。

2 个答案:

答案 0 :(得分:3)

模块有点像无实例的类。因此,模块中定义的实例方法本身是无用的;你需要include一个类中的模块才能使用它们。

这很重要,因为attr_accessor :var基本上定义了两个实例方法:

def var
  @var
end
def var= v
  @var = v
end

如果您希望var = "wibble"调用刚创建的实例方法,则需要self成为Moddy实例,但在此上下文中{ {1}}仅为self,因此您实际上只是创建了一个名为Moddy的局部变量。

如果您希望var拥有Moddy,则需要从单例类中调用var(因为attr_accessor是其单例类的实例)。

Moddy

答案 1 :(得分:0)

module Moddy

  attr_accessor :action

  def initialize
    @action= "wibble"  
  end

  class Squiggy
    include Moddy
    def initialize
      super
    end  

    def put_var
      puts @action
    end

  end

end

reference: Accessing instance variables declared in ruby modules