模块底层的Ruby作用域

模块底层的Ruby作用域,ruby,scope,Ruby,Scope,我找不到任何有意义的解释 我试图找出如何访问我在模块中创建的变量,但不是在任何类中创建的变量,即: module Moddy attr_accessor :var var = "wibble" class Squiggy def Class_Method () end end end 我试图弄清楚如何(如果可能的话)从“Squiggy”的范围内以及从需要Moddy的脚本的范围内访问“var” module Moddy attr_accessor :a

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

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

module Moddy

attr_accessor :var

var = "wibble"

  class Squiggy

    def Class_Method ()

    end

  end

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

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


模块有点像没有实例的类。因此,模块中定义的实例方法本身是无用的;您需要
将该模块包含在类中才能使用它们

这很重要,因为
attr\u accessor:var
本质上定义了两个实例方法:

def var
  @var
end
def var= v
  @var = v
end
如果您想调用刚刚创建的实例方法,您需要将
self
作为
Moddy
的实例,但是在这个上下文中
self
只是
Moddy
,所以您实际上只是创建了一个名为
var
的局部变量

如果希望
Moddy
拥有
var
,则需要从singleton类调用
attr\u accessor
(因为
Moddy
是其singleton类的一个实例)

Moddy模块

类模块有点像没有实例的类。因此,模块中定义的实例方法本身是无用的;您需要
将该模块包含在类中才能使用它们

这很重要,因为
attr\u accessor:var
本质上定义了两个实例方法:

def var
  @var
end
def var= v
  @var = v
end
如果您想调用刚刚创建的实例方法,您需要将
self
作为
Moddy
的实例,但是在这个上下文中
self
只是
Moddy
,所以您实际上只是创建了一个名为
var
的局部变量

如果希望
Moddy
拥有
var
,则需要从singleton类调用
attr\u accessor
(因为
Moddy
是其singleton类的一个实例)

Moddy模块

类模块有点像没有实例的类。因此,模块中定义的实例方法本身是无用的;您需要
将该模块包含在类中才能使用它们

这很重要,因为
attr\u accessor:var
本质上定义了两个实例方法:

def var
  @var
end
def var= v
  @var = v
end
如果您想调用刚刚创建的实例方法,您需要将
self
作为
Moddy
的实例,但是在这个上下文中
self
只是
Moddy
,所以您实际上只是创建了一个名为
var
的局部变量

如果希望
Moddy
拥有
var
,则需要从singleton类调用
attr\u accessor
(因为
Moddy
是其singleton类的一个实例)

Moddy模块

类模块有点像没有实例的类。因此,模块中定义的实例方法本身是无用的;您需要
将该模块包含在类中才能使用它们

这很重要,因为
attr\u accessor:var
本质上定义了两个实例方法:

def var
  @var
end
def var= v
  @var = v
end
如果您想调用刚刚创建的实例方法,您需要将
self
作为
Moddy
的实例,但是在这个上下文中
self
只是
Moddy
,所以您实际上只是创建了一个名为
var
的局部变量

如果希望
Moddy
拥有
var
,则需要从singleton类调用
attr\u accessor
(因为
Moddy
是其singleton类的一个实例)

Moddy模块
班