ruby中的实例变量和类变量
Posted Liz-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ruby中的实例变量和类变量相关的知识,希望对你有一定的参考价值。
定义很简单:实例变量@开头,类变量@@开头
看了一些文章和书,目前了解到的(其实还是不太懂,先记着吧,错了再改):
- 类变量:可以在类方法和类实例方法中访问,也能被子类继承,并且子类修改之后,父类的值也会更改。
- 不同的子类都共享这个一个数值,包括子类的实例,都可以来修改这一个值。就理解成:不管自己还是子类的,什么函数都可以访问,也都可以改,改了之后也是大家共享。
- 实例变量:能被类方法访问,不能被继承,子类中赋值不会影响父类。
- 子类如果修改了,其实是不是重新定义了一下又赋了新的值?
- 这个其实更像应该和C++/C#类里的public变量,子类继承了之后可以重新赋值,代码还是一样用。
- 但是实例变量不能被类实例方法访问就有点抽象了…被相似的名词弄的脑仁儿疼。
我也不太知道自己在说什么, 忘了就直接看代码:
1 class Test 2 @@class_var = 10 3 @class_instance_var = 1 4 #类方法: 两种变量都可以访问 5 def self.outclass_var 6 puts @@class_var 7 end 8 def self.outclass_instance_var 9 puts @class_instance_var 10 end 11 #类实例方法: 不能访问类实例变量 12 def outclass_var 13 puts @@class_var 14 end 15 def outclass_instance_var 16 puts @class_instance_var 17 end 18 end 19 20 #如果两个变量不初始化,这里就打印不出来。不知道是不是版本的问题 21 puts Test.class_variables #=>@@class_var 22 puts Test.instance_variables #=>@class_instance_var 23 24 #类变量,可以被子类共享且修改 25 class SubCls < Test 26 @@class_var = 12 27 end 28 29 #可以看到现在类变量值都被修改了 30 Test.outclass_var #=>12 31 SubCls.outclass_var #=>12 32 33 #子类无法继承父类的实例变量 34 Test.outclass_instance_var #=>1 35 SubCls.outclass_instance_var #=>空 36 37 38 #类实例方法不能访问实例变量 39 Test.new.outclass_var #=>12 40 Test.new.outclass_instance_var #空 41 42 #再看一下子类,和父类的情况相同 43 SubCls.new.outclass_var #=>12 44 SubCls.new.outclass_instance_var #空
以上是关于ruby中的实例变量和类变量的主要内容,如果未能解决你的问题,请参考以下文章