gpt4 book ai didi

ruby - 如果将@x = 5 放在类定义之后会怎么样?

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

1) @x 在这段代码中的作用是什么?它不是一个实例变量,对吗?因为我的代码中没有 attr_accessor 或 initialize 方法。 (如果我没记错的话)

2) 如何查看x中的数据?我怎样才能做到这一点?

代码如下:

class A
@x = 5
// some other things here
end

最佳答案

类对象本身是 Class 的一个实例。

A.class
#=> Class

所以这确实是一个实例变量,只是在类 A 本身上,而不是在 A 的实例上。如果没有访问器,您将获得如下值:

A.instance_variable_get('@x')
#=> 5

类变量(@@x)和类实例变量(@x)的区别在于前者是与子类共享的,而后者不是:

class Test1 ; @@x = 5 ; end
class Test2 < Test1 ; end

Test2.class_variable_get('@@x')
#=> 5
Test1.class_variable_set('@@x', 1)
#=> 1
>> Test2.class_variable_get('@@x')
#=> 1

类实例变量不会发生这种情况:

class Test3 ; @x = 5 ; end
class Test4 < Test 3 ; end

Test3.instance_variables
#=> [:@x]
>> Test4.instance_variables
#=> []

关于ruby - 如果将@x = 5 放在类定义之后会怎么样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50467524/

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