全局变量以$开头,未初始化时默认的值是nil,给全局变量赋值时会改变全局的状态,所以一般不建议使用全局变量。
# 定义一个全局变量$quanju
$quanju = 10
class BianLiang1
# 定义个方法 打印出全局
def print_quanju
puts "打印全局变量值:#$quanju"
end
# 修改全局变量
def update
$quanju = 20
puts "打印修改后的全局变量值:#$quanju"
end
end
class BianLiang2
def print_quanju
puts "打印全局变量值:#$quanju"
end
# 修改全局变量
def update
$quanju = 30
puts "打印修改后的全局变量值:#$quanju"
end
end
bian1 = BianLiang1.new
bian1.print_quanju
bian1.update
bian2 = BianLiang2.new
bian2.print_quanju
bian2.update
bian1.print_quanju
打印全局变量值:10 打印修改后的全局变量值:20 打印全局变量值:20 打印修改后的全局变量值:30 打印全局变量值:30
实例变量以@开头。未初始化时默认值是 nul。实例变量是每个实例独有的,不予其它实例共享,既自己改变了,其它实例不受影响。 实例变量是私有的,无法在类外直接引用,但是可以通过类方法和实例方法访问。
class Variable
@shili01 = 10
@shili02 = 20
def shili
puts @shili01 = 30
puts @shili02
puts @shili03 = 50
end
def self.t
puts @shili01
puts @shili02
end
end
object = Variable.new
object.shili
puts "=======分割线======="
Variable.t
30 nil 50 =======分割线======= 10 20
注意:前后定义的两个@shili02 是两个不用的实例变量。第一个是类对象的实例变量,第二个是类的实例对象的实例变量。
类变量名以 @@ 开头,必须初始化才能在方法定义中使用。类变量被这个类所有,实例对象共享。 类变量是私有的,再类外无法直接访问,可以通过类方法和实例方法访问。
class Variables
@@lei = 0
def add
@@lei += 1
puts "类变量值:#@@lei"
end
end
v = Variables.new
v.add
v2 = Variables.new
v2.add
类变量值:1 类变量值:2
局部变量以小写字母或者下划线开头。局部变量的作用域从 class、module、def、do 到相应的结尾或者从左大括号到右大括号。 当调用一个未初始化的局部变量时,它被解释为调用一个不带参数的方法。 局部变量不可以在内部类或者子类中访问;类中的方法不可以访问该类中定义的局部变量。