本帖最后由 test 于 2015-1-1 22:35 编辑
欧买歌 发表于 2015-1-1 18:02
我也不知道
请试着理解下面代码:
# 定义了一个全局变量$c,并使它的值等于333的函数。 def x() $c = 333; #全局变量 end # 测试用的类 class Test #定义了一个类变量@@a,并使它的值等于111。 @@a = 111; #创建实例的时候,会执行这个函数↓ def initialize(b) @b = b; #定义了实例变量@b,并使它的值等于函数的参数b的值。 end #输出类变量@@a的值的函数 def say_a() p @@a; end #输出实例变量@b的值的函数 def say_b() p @b; end #输出全局变量$c的值的函数 def say_c() p $c; end #设置类变量@@a的值的函数 def set_a(v) @@a = v; end #设置实例变量@b的值的函数 def set_b(v) @b = v; end end # 创建两个测试类的实例$t1和$t2。并分别使它们的实例变量@b的值为'222-1'和'222-2'。 $t1 = Test.new('222-1'); $t2 = Test.new('222-2'); # ●测试全局变量 # 在函数里使全局变量$c的值为333。 x(); # 使用$t1和$t2中的say_c函数输出全局变量$c的值。 $t1.say_c(); # 输出的值为333 $t2.say_c(); # 输出的值为333 $c = 333; #改变全局变量$c的值为33301 $t1.say_c(); # 输出的值为33301 $t2.say_c(); # 输出的值为33301 # ●测试实例变量 # 使用$t1和$t2中的say_b函数输出实例变量@b的值。 $t1.say_b(); # 输出的值为222-1 $t2.say_b(); # 输出的值为222-2 $t1.set_b(444); # 使用$1中的say_b函数,使实例变量@b的值变成444。 $t1.say_b(); # 输出的值为444 $t2.say_b(); # 输出的值为222-2 # ●测试类变量 # 使用$t1和$t2中的say_a函数输出类变量@@a的值。 $t1.say_a(); # 输出的值为333 $t2.say_a(); # 输出的值为333 $t1.set_a(555); # 使用$t1中的say_a函数,使类变量@@a的值变成555。 $t1.say_a(); # 输出的值为555 $t2.say_a(); # 输出的值为555 # ●它们的区别就在于它们的有效范围,在范围外使用这个变量脚本会出错。 # 全局变量从定义开始,在整个脚本里面任意的地方可以读取,改变它的值。 # 实例变量在实例化之后,各个实例之间它们的值不会相互影响。 # 类变量不实例化,在以这个类创建出来的每一个实例中共用。
# 定义了一个全局变量$c,并使它的值等于333的函数。
def x()
$c = 333; #全局变量
end
# 测试用的类
class Test
#定义了一个类变量@@a,并使它的值等于111。
@@a = 111;
#创建实例的时候,会执行这个函数↓
def initialize(b)
@b = b; #定义了实例变量@b,并使它的值等于函数的参数b的值。
end
#输出类变量@@a的值的函数
def say_a()
p @@a;
end
#输出实例变量@b的值的函数
def say_b()
p @b;
end
#输出全局变量$c的值的函数
def say_c()
p $c;
end
#设置类变量@@a的值的函数
def set_a(v)
@@a = v;
end
#设置实例变量@b的值的函数
def set_b(v)
@b = v;
end
end
# 创建两个测试类的实例$t1和$t2。并分别使它们的实例变量@b的值为'222-1'和'222-2'。
$t1 = Test.new('222-1');
$t2 = Test.new('222-2');
# ●测试全局变量
# 在函数里使全局变量$c的值为333。
x();
# 使用$t1和$t2中的say_c函数输出全局变量$c的值。
$t1.say_c(); # 输出的值为333
$t2.say_c(); # 输出的值为333
$c = 333; #改变全局变量$c的值为33301
$t1.say_c(); # 输出的值为33301
$t2.say_c(); # 输出的值为33301
# ●测试实例变量
# 使用$t1和$t2中的say_b函数输出实例变量@b的值。
$t1.say_b(); # 输出的值为222-1
$t2.say_b(); # 输出的值为222-2
$t1.set_b(444); # 使用$1中的say_b函数,使实例变量@b的值变成444。
$t1.say_b(); # 输出的值为444
$t2.say_b(); # 输出的值为222-2
# ●测试类变量
# 使用$t1和$t2中的say_a函数输出类变量@@a的值。
$t1.say_a(); # 输出的值为333
$t2.say_a(); # 输出的值为333
$t1.set_a(555); # 使用$t1中的say_a函数,使类变量@@a的值变成555。
$t1.say_a(); # 输出的值为555
$t2.say_a(); # 输出的值为555
# ●它们的区别就在于它们的有效范围,在范围外使用这个变量脚本会出错。
# 全局变量从定义开始,在整个脚本里面任意的地方可以读取,改变它的值。
# 实例变量在实例化之后,各个实例之间它们的值不会相互影响。
# 类变量不实例化,在以这个类创建出来的每一个实例中共用。
|