Jef*_*rey 2 ruby variables instance
作为一个实验,我写了一些看起来像的代码
class MyClass
@var = 100
def hello
p "hello"
end
end
Run Code Online (Sandbox Code Playgroud)
我知道,如果我这样做MyClass.new
是@var
不是那个对象上定义的,而我认为这将定义@var
的类MyClass
.
这有实际用途吗?
它确实有一个用途:类变量.正常的Ruby类变量实现,@@
,分享一个超类及其子类之间相同的变量:
class A
@@v = 0
def self.v; @@v; end
def self.v=(val); @@v=val; end
end
class B < A; end
A.v #-> 0
A.v= 3 #-> 3
B.v #->3
B.v= 42 #-> 42
A.v #-> 42
Run Code Online (Sandbox Code Playgroud)
显然,这是非常无用的(除了事实上,与类实例变量不同,类变量也可以直接在实例方法中访问,而不是通过self.class
).但是类实例变量的示例相同:
class A
@v = 0
def self.v; @v; end
def self.v=(val); @v=val; end
end
class B < A; end
A.v #-> 0
A.v= 3 #-> 3
B.v= 42 #-> 42
A.v #-> 3
Run Code Online (Sandbox Code Playgroud)
此外,类实例变量可以利用已经为实例变量编写的所有元编程,如下所示:
class Foo
class << self
attr_accessor :v #Uses a class instance variable
end
end
Run Code Online (Sandbox Code Playgroud)