脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Ruby - Ruby中的变量学习总结

Ruby中的变量学习总结

2020-04-19 11:21脚本之家 Ruby

这篇文章主要介绍了Ruby中的变量学习总结,本文详细讲解了Ruby中的局部变量、实例变量、类变量、全局变量等4种变量类型,并对它们的作用范围做了总结,需要的朋友可以参考下

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" 
  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。

延伸 · 阅读

精彩推荐
  • Ruby对Ruby on Rails进行高效的单元测试的教程

    对Ruby on Rails进行高效的单元测试的教程

    这篇文章主要介绍了在Ruby on Rails中进行高效的单元测试的教程,使用到了Ruby的RSpec和Factory Girl框架,需要的朋友可以参考下 ...

    李冠德3562020-04-26
  • RubyRuby编程中关于中断和返回的用法教程

    Ruby编程中关于中断和返回的用法教程

    这篇文章主要介绍了Ruby编程中关于中断和返回的用法教程,作者用代码举例讲解了其中需要注意的问题,需要的朋友可以参考下 ...

    李哲3142020-04-27
  • RubyRuby on Rails所构建的应用程序基本目录结构总结

    Ruby on Rails所构建的应用程序基本目录结构总结

    Ruby on Rails是Ruby世界中一家独大的Web开发框架,要掌握Rails程序的构建,对其目录结构的了解十分必要,下面就来看一下Ruby on Rails所构建的应用程序基本目录结...

    kevinhua4002020-05-09
  • RubyRuby中对一元操作符重载实例

    Ruby中对一元操作符重载实例

    这篇文章主要介绍了Ruby中对一元操作符重载实例,实例说明如何对一元操作符进行重载,需要的朋友可以参考下 ...

    junjie1852020-04-14
  • Ruby深入讲解Ruby中Block代码块的用法

    深入讲解Ruby中Block代码块的用法

    这篇文章主要介绍了深入讲解Ruby中Block代码块的用法,block是Ruby学习进阶当中的重要知识,需要的朋友可以参考下 ...

    pringwq4582020-04-27
  • RubyWindows下ruby语言安装教程

    Windows下ruby语言安装教程

    这篇文章主要介绍了Windows下ruby语言安装教程,本文使用rubyinstaller提供的安装包安装,并给出图文说明,非常简单,需要的朋友可以参考下 ...

    脚本之家5522020-04-22
  • Rubyruby实现修改ubuntu下的hosts

    ruby实现修改ubuntu下的hosts

    本文给大家分享的是通过ruby获取github上的hosts文件内容,修改到本地Ubuntu中,十分的实用,具体你懂得,有需要的小伙伴可以参考下。 ...

    脚本之家3882020-05-03
  • RubyRuby学习笔记之gem 命令详解

    Ruby学习笔记之gem 命令详解

    gem是一种文件组织的包,一般的ruby的很多插件都有由这种各种的包提供。我们来看看gem的用法 ...

    hebedich8662020-04-16