gpt4 book ai didi

ruby - 全面理解 Ruby 类变量

转载 作者:数据小太阳 更新时间:2023-10-29 07:48:28 27 4
gpt4 key购买 nike

在这个代码块中,

@@y = 1
class MyClass
@@y = 2
end
p @@y # => 2

天真地,似乎 @@y 在顶级范围内,它与 MyClass 中的 @@y 不同 的范围。为什么 @@y 会受到类 MyClass 定义的影响? (为什么结果是 2?)

最佳答案

让我们看看这个例子。 Bar 中的 @@x 确实与 Foo 中的 @@x 分开。

class Foo
@@x = 1
end

class Bar
@@x = 2
end

Foo.class_variable_get(:@@x) # => 1
Bar.class_variable_get(:@@x) # => 2

但是如果 BarFoo 的子节点会怎样呢?

class Foo
@@x = 1
end

class Bar < Foo
@@x = 2
end

Foo.class_variable_get(:@@x) # => 2
Bar.class_variable_get(:@@x) # => 2

在这种情况下,@@x在这两种情况下是相同的,它是在Foo中声明的。

现在,回到您的示例:

@@y = 1
class MyClass
@@y = 2
end
p @@y

第一行在根范围内声明类变量。 Root 是一个main 类型的特殊对象Object。因此,从本质上讲,您是在 Object 类上定义一个类变量。由于一切都是对象,这就是MyClass 的定义也继承@@y 并能够更改它的方式。

关于ruby - 全面理解 Ruby 类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12424430/

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