首页 > 学院 > 开发设计 > 正文

Ruby中的变量学习总结

2019-10-26 19:24:20
字体:
来源:转载
供稿:网友

Ruby中的变量有几种形式,分别是局部变量、实例变量、类变量、全局变量,对于初学者来说,常常容易搞混,尤其像本人这种做java的,理解起来还是头痛,经过仔细辨别学习,将这几种变量的差异及使用场景总结如下:

一、命名方式

1.局部变量:小写字母或者“_”开头,如user,解释器解释到时才开始在内存中存在,一个良好的习惯是在进行变量定义时用nil进行赋值初始化,否则会出现类似undefined local variable or method `z'的错误;
2.实例变量:@开头,如@user,默认初始化为nil,此处的“实例”指的是类对象本身,或者类的对象;
3.类变量:@@开头,如@@user,需要进行初始化后才能调用,否则会出现类似uninitialized class variable @@user in Account的错误;
4.全局变量:$开头,如$user,默认初始化为nil;

二、作用范围

局部变量:如user,只作用于本类、本方法或本模块内,不同于java语言习惯,在类中定义的变量,可以在类的方法中进行调用,Ruby中的局部变量,类中定义的,只能在类中访问,其子类、方法、内部类中都无法调用,如下边示例代码:
代码如下:
class Account
 user=User.new
 def myMethod
  puts user.name   #调用发生错误,user未定义
 end
end

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

代码如下:
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    #输出:''

再看如下代码:

代码如下:
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" 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表