Ruby中的变量学习总结

2019-09-25 09:47:41于海丽

  end
end 

A.look        #输出:'This is @alpha' value!''
a=A.new
a.look        #输出:'This is @alpha' value from look!'
a.look_again  #输出:'This is @alpha' value from look!'

可见,@alpha='This is @alpha' value!'是定义在类对象本身的实例变量,@alpha='This is @alpha' value from look!'是定义在类实例化后的对象中的实例变量,另外,使用实例变量时还应该注意一下几点:

1、实例变量不管是在类中定义,还是在方法中定义,其都属于类,而不是方法
2、实例变量只存在于实例范围,不可在子类中引用或者赋值
3、实例变量永远都是Private的,不能暴露为Public,外部访问通过方法进行,可以使用attr_accessor简便定义

类变量:如@@user,作用于类的所有范围,所有实例对象共享,包括子类及其实例对象,类变量通过Protected声明的,如下边示例代码:

class A 
  #类的类实例变量在访问前可以赋值也可以不赋值,不赋值就是nil 
  @@alpha='This is @alpha' value!'

  def A.look
   puts "#@@alpha" 
  end
  def look
   puts "#@@alpha" 
  end
  def look_again 
   puts "#@@alpha" 
  end
end 

class B<A
end

A.look        #输出:'This is @alpha' value!'
B.look        #输出:'This is @alpha' value!'
a=A.new
a.look        #输出:'This is @alpha' value!'
a.look_again  #输出:'This is @alpha' value!'
b=B.new
b.look        #输出:'This is @alpha' value!'
b.look_again  #输出:'This is @alpha' value!'

全局变量:如$user,尽量少使用 ,作用于整个程序的生命周期,常驻内存,过量使用会引起性能下降,内存溢出,Ruby内置一些全局变量,获取相关数据十分方便,如$0'代表的是所运行应用程序的文件名称,‘$:'代表的是默认的文件搜索路径;'$$'代表的是 ruby 程序的进程 id。