Ruby 新人学 Ruby --- Ruby 变量

shijin880921 · 2015年09月11日 · 最后由 shijin880921 回复于 2015年09月15日 · 3131 次阅读

如有错误望提出。谢谢!

1.全局变量

全局变量以$开头,未初始化时默认的值是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

2.实例变量

实例变量以@开头。未初始化时默认值是 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 是两个不用的实例变量。第一个是类对象的实例变量,第二个是类的实例对象的实例变量。

3.类变量

类变量名以 @@ 开头,必须初始化才能在方法定义中使用。类变量被这个类所有,实例对象共享。 类变量是私有的,再类外无法直接访问,可以通过类方法和实例方法访问。

例子:

class Variables
  @@lei = 0

  def add
    @@lei += 1
    puts "类变量值:#@@lei"
  end
end

v = Variables.new
v.add

v2 = Variables.new
v2.add

结果:

类变量值:1 类变量值:2

4.局部变量

局部变量以小写字母或者下划线开头。局部变量的作用域从 class、module、def、do 到相应的结尾或者从左大括号到右大括号。 当调用一个未初始化的局部变量时,它被解释为调用一个不带参数的方法。 局部变量不可以在内部类或者子类中访问;类中的方法不可以访问该类中定义的局部变量。

自己顶个。

#1 楼 @shijin880921 实例变量初始化写在 initialize 里面,就可以输出

    class Test
      def initialize()
           @shili02="20"
      end
      def mp
                 puts "shili02 is "+ @shili02
      end
    end

t=Test.new
t.mp

#2 楼 @yakczh 谢谢。理解了。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号