Ruby中类定义内直接赋值@x=5的作用及访问方法咨询
关于Ruby类中
@x的疑问解答 嘿,我来帮你理清这两个问题:
1. @x 的作用到底是什么?它是不是实例变量?
你说得完全对!这个@x不是我们平时说的“实例变量”(就是A.new创建出来的对象持有的那种变量)。在Ruby里,类本身也是一个对象哦(属于Class类的实例),当你在类定义的顶层(没放在任何方法里)直接写@x = 5时,这个@x是类对象自己的实例变量——换句话说,它是属于A这个类本身的,不是A的实例对象的。
举个简单的区分:普通实例变量是每个A的实例(比如a = A.new)各自拥有的;而这个@x只有A类本身能持有,所有A的实例都碰不到它。另外它和@@x这种类变量也不一样,类变量会被子类共享,而类实例变量不会被继承。
2. 怎么查看和访问@x里的数据?
因为@x是类A自己的实例变量,所以得从类的角度去访问:
- 最规范的方式是给
A加个类方法来暴露它:class A @x = 5 # 定义类方法来读取@x def self.x @x end end # 直接通过类调用方法获取值 puts A.x # 会输出 5 - 要是临时想查看,也可以用Ruby对象通用的
instance_variable_get方法(类对象也是对象,当然能用):class A @x = 5 end puts A.instance_variable_get(:@x) # 同样输出 5
如果要修改它的话,要么加个类方法,要么用instance_variable_set:
# 修改@x的值 A.instance_variable_set(:@x, 10) puts A.instance_variable_get(:@x) # 现在输出 10
记住哦,如果你创建A的实例(比如a = A.new),这个a是访问不到@x的,因为它根本不属于这个实例~
内容的提问来源于stack exchange,提问作者blackwater7
相关产品推荐
相关产品推荐

