1)@x在此代码中的作用是什么?它不是一个实例变量吧?因为我的代码中没有attr_accessor或initialize方法。 (如果我没记错的话)
2)如何查看x中的数据?我该怎么做到?
以下是代码:
class A
@x = 5
// some other things here
end
答案 0 :(得分:5)
类对象本身是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
#=> []
答案 1 :(得分:0)
它不是A类对象的实例变量,但它是类本身的实例变量。类只是ruby中的一个对象,因此该类可以拥有自己的实例变量。
class A
@x = 5
def self.show_my_var
@x
end
end
A.show_my_var
=> 5