gpt4 book ai didi

ruby - 类变量和类实例变量之间的区别?

转载 作者:数据小太阳 更新时间:2023-10-29 06:18:31 26 4
gpt4 key购买 nike

谁能告诉我类变量和类实例变量的区别?

最佳答案

类变量 ( @@ ) 在类及其所有后代之间共享。类实例变量 ( @ ) 不被类的后代共享。


类变量(@@)

让我们有一个类 Foo 和一个类变量 @@i , 以及读写访问器 @@i :

class Foo

@@i = 1

def self.i
@@i
end

def self.i=(value)
@@i = value
end

end

派生类:

class Bar < Foo
end

我们看到 Foo 和 Bar 的 @@i 值相同:

p Foo.i    # => 1
p Bar.i # => 1

并改变@@i在一个中改变它在两个中:

Bar.i = 2
p Foo.i # => 2
p Bar.i # => 2

类实例变量(@)

让我们创建一个带有类实例变量的简单类 @i和读写访问器@i :

class Foo

@i = 1

def self.i
@i
end

def self.i=(value)
@i = value
end

end

派生类:

class Bar < Foo
end

我们看到虽然 Bar 继承了 @i 的访问器, 它不继承 @i本身:

p Foo.i    # => 1
p Bar.i # => nil

我们可以设置Bar的@i不影响 Foo 的 @i :

Bar.i = 2
p Foo.i # => 1
p Bar.i # => 2

关于ruby - 类变量和类实例变量之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3802540/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com