gpt4 book ai didi

ruby - Ruby 中的变量行为

转载 作者:太空宇宙 更新时间:2023-11-03 18:13:50 28 4
gpt4 key购买 nike

我有一个我无法解释的奇怪案例:

@@test = 1234

def m
puts @@test
end

class Test
@@test = 5678
end

m

如果我不定义5678,那么输出就是1234。

如果我没有定义1234,则未声明变量错误。

现在,如果我定义 1234,输出是 5678,为什么?

我真的很困惑。

最佳答案

If I do not define 5678, then output is 1234.

这是因为@@test 是一个类变量,在其类的子类之间共享。您将其定义在顶层,顶层具有类 Object 的作用域,方法 m 成为 private 方法 对象类。因此,当您从顶层调用 m 时,您将获得 1234 的输出。

Now, if I define 1234, the output is 5678,

正如我所说,类变量是共享的Test 默认是 Object 的子类。在 Test 中,您修改了共享变量 @@test。这就是为什么现在调用 m 会给出 @@test 的当前更新值,即 5678

if I do not define 1234, then undeclared variable error.

没有错。如果您在定义它们之前尝试使用类变量,您将得到异常未初始化的类变量@@test

关于ruby - Ruby 中的变量行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29407547/

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