Ruby 范围在模块的底层
Ruby scope at the bottom level of a module
我找不到任何对此有意义的解释。
我正在尝试弄清楚如何访问我在模块中创建的变量,但不在任何 class 中,即:
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
reference: Accessing instance variables declared in ruby modules
模块有点像 class,但 没有实例 。因此,模块中定义的实例方法本身是无用的;您需要 include
class 中的那个模块才能使用它们。
这很重要,因为 attr_accessor :var
本质上定义了两个实例方法:
def var
@var
end
def var= v
@var = v
end
如果要var = "wibble"
调用刚刚创建的实例方法,需要self
成为Moddy
的实例,但在这种情况下 self
只是 Moddy
所以你实际上只是在创建一个名为 var
.
的局部变量
如果你想让Moddy
拥有var
,你需要从单例class调用attr_accessor
(因为Moddy
是它的一个实例单例 class).
module Moddy
class << self
attr_accessor :var
end
self.var = "wibble"
end
Moddy.var
# "wibble"
我找不到任何对此有意义的解释。
我正在尝试弄清楚如何访问我在模块中创建的变量,但不在任何 class 中,即:
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
reference: Accessing instance variables declared in ruby modules
模块有点像 class,但 没有实例 。因此,模块中定义的实例方法本身是无用的;您需要 include
class 中的那个模块才能使用它们。
这很重要,因为 attr_accessor :var
本质上定义了两个实例方法:
def var
@var
end
def var= v
@var = v
end
如果要var = "wibble"
调用刚刚创建的实例方法,需要self
成为Moddy
的实例,但在这种情况下 self
只是 Moddy
所以你实际上只是在创建一个名为 var
.
如果你想让Moddy
拥有var
,你需要从单例class调用attr_accessor
(因为Moddy
是它的一个实例单例 class).
module Moddy
class << self
attr_accessor :var
end
self.var = "wibble"
end
Moddy.var
# "wibble"