内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
在符号前加上Double at符号(@@
)的ruby变量是什么?我对变量的理解是,它是一个实例变量,在PHP中如下所示:
PHP
class Person { public $name; public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } }
Ruby
class Person def set_name(name) @name = name end def get_name() @name end end
以前缀为前缀的变量@
是实例变量,而一个前缀是@@
是类变量
class Test @@shared = 1 def value @@shared end def value=(value) @@shared = value end end class AnotherTest < Test; end t = Test.new puts "t.value is #{t.value}" # 1 t.value = 2 puts "t.value is #{t.value}" # 2 x = Test.new puts "x.value is #{x.value}" # 2 a = AnotherTest.new puts "a.value is #{a.value}" # 2 a.value = 3 puts "a.value is #{a.value}" # 3 puts "t.value is #{t.value}" # 3 puts "x.value is #{x.value}" # 3
@
- 实例变量
@@
- 类变量,在某些情况下也称为静态变量
类变量是在类的所有实例之间共享的变量。这意味着对于从此类实例化的所有对象,只有一个变量值存在。如果一个对象实例更改变量的值,那么对于所有其他对象实例,该新值本质上将发生更改。
思考类变量的另一种思路是在单个类的上下文中作为全局变量。类变量是通过在变量名前加两个@
字符(@@
)来声明的。类变量必须在创建时初始化