Ruby中变量学习总结

Ruby中的变量主要分为、实例变量、类变量、局部变量、全局变量等4种变量类型

一、命名方式

1.局部变量:小写字母或者“_”开头,如user,解释器解释到时才开始在内存中存在,一个良好的习惯是在进行变量定义时用nil进行赋值初始化,否则会出现类似undefined local variable or method `z'的错误,变量可以不经定义类型直接使用如:a = 3    b = 2.3 等,解释器会自动给变量匹配数据类型
2.实例变量:@开头,如@user,默认初始化为nil,此处的“实例”指的是类对象本身,或者类的对象;相当JAVA中的属性,在ruby中实例变量默认都是private的
3.类变量:@@开头,如@@user,需要进行初始化后才能调用,否则会出现类似uninitialized class variable @@user in Account的错误;类变量相当JAVA中的被static修饰的属性,属于类本身,所有类的对象共享
4.全局变量:$开头,如$user,默认初始化为nil;


二、作用范围

局部变量:Ruby中的局部变量,类中定义的,只能在类中访问,其子类、方法、内部类中都无法调用,如下边示例代码:

<span style="font-size:14px;">class Account
 user = 3
 def myMethod
  puts user   #调用发生错误,user未定义
 end
end</span>

实例变量:如@user,有点类似于java中POJO类的成员变量不过在ruby中默认是private的,类中随意访问,类外通过方法访问,作用于本实例对象范围内或本类的实例对象范围内(这句话有点绕口,注意分清楚类对象本身[Account,是Class类的一个对象]和 类实例化后的对象[Account.new,是Account类的一个对象]),这是两个相互独立的域,定义在Account中的变量不能在Account.new中访问,反之亦然,如下边示例代码:

<span style="font-size:14px;">class A 
  #类的类实例变量在访问前可以赋值也可以不赋值,不赋值就是nil 
  @alpha='This is @alpha\' value!'
 
  def A.look
   puts "#@alpha" 
  end
  def look 
   puts "#@alpha" 
  end
end 

A.look        #输出:'This is @alpha' value!''
A.new.look    #输出:''</span>

<span style="font-size:14px;">class A 
  #类的类实例变量在访问前可以赋值也可以不赋值,不赋值就是nil 
  @alpha='This is @alpha\' value!'

  def A.look
   puts "#@alpha" 
  end
  def look
   @alpha='This is @alpha\' value from look!'
   puts "#@alpha" 
  end
  def look_again 
   puts "#@alpha" 
  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!'</span>

可见@alpha变量的访问在类是实例化对象和类的定义本身的访问是互补干预的。需要注意的几点:

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


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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值