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

时间:2018-05-22 12:20:19

标签: ruby variables

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

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

以下是代码:

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

2 个答案:

答案 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