1)@x在此代码中的作用是什么?它不是一个实例变量吧?因为我的代码中没有attr_accessor或initialize方法.(如果我没记错的话)
2)如何查看x中的数据?我该怎么做到?
这是代码:
class A
@x = 5
// some other things here
end
Run Code Online (Sandbox Code Playgroud)
类对象本身就是一个实例Class.
A.class
#=> Class
Run Code Online (Sandbox Code Playgroud)
所以这确实是一个实例变量,只是在类A本身上,而不是在实例上A.如果没有访问器,您将获得如下值:
A.instance_variable_get('@x')
#=> 5
Run Code Online (Sandbox Code Playgroud)
类变量(@@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
Run Code Online (Sandbox Code Playgroud)
类实例变量不会发生这种情况:
class Test3 ; @x = 5 ; end
class Test4 < Test 3 ; end
Test3.instance_variables
#=> [:@x]
>> Test4.instance_variables
#=> []
Run Code Online (Sandbox Code Playgroud)