Ruby中@@变量的含义是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

在符号前加上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

用户回答回答于

@- 实例变量 @@- 类变量,在某些情况下也称为静态变量

类变量是在类的所有实例之间共享的变量。这意味着对于从此类实例化的所有对象,只有一个变量值存在。如果一个对象实例更改变量的值,那么对于所有其他对象实例,该新值本质上将发生更改。

思考类变量的另一种思路是在单个类的上下文中作为全局变量。类变量是通过在变量名前加两个@字符(@@)来声明的。类变量必须在创建时初始化

扫码关注云+社区