如果您在课程定义后立即放置@x = 5怎么办?

bla*_*er7 2 ruby variables

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

2)如何查看x中的数据?我该怎么做到?

这是代码:

class A
@x = 5
// some other things here
end
Run Code Online (Sandbox Code Playgroud)

Mic*_*ohl 5

类对象本身就是一个实例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)