Ruby 变量

  变量是持有可被任何程序使用的任何数据的存储位置。

  Ruby 支持五种类型的变量。您已经在前面的章节中大概了解了这些变量,本章节将为您详细讲解这五种类型的变量。

  Ruby 全局变量

  全局变量以 $ 开头。未初始化的全局变量的值为 nil,在使用 -w 选项后,会产生警告。

  给全局变量赋值会改变全局状态,所以不建议使用全局变量。

  下面的实例显示了全局变量的用法。

  #!/usr/bin/ruby

  $global_variable = 10

  class Class1

  def print_global

  puts "Global variable in Class1 is #$global_variable"

  end

  end

  class Class2

  def print_global

  puts "Global variable in Class2 is #$global_variable"

  end

  end

  class1obj = Class1.new

  class1obj.print_global

  class2obj = Class2.new

  class2obj.print_global

  在这里,$global_variable 是全局变量。这将产生以下结果:

  注意:在 Ruby 中,您可以通过在变量或常量前面放置 # 字符,来访问任何变量或常量的值。

  Global variable in Class1 is 10

  Global variable in Class2 is 10

  Ruby 实例变量

  实例变量以 @ 开头。未初始化的实例变量的值为 nil,在使用 -w 选项后,会产生警告。

  下面的实例显示了实例变量的用法。

  #!/usr/bin/ruby

  class Customer

  def initialize(id, name, addr)

  @cust_id=id

  @cust_name=name

  @cust_addr=addr

  end

  def display_details()

  puts "Customer id #@cust_id"

  puts "Customer name #@cust_name"

  puts "Customer address #@cust_addr"

  end

  end

  # 创建对象

  cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")

  cust2=Customer.new("2", "Poul", "New Empire road, Khandala")

  # 调用方法

  cust1.display_details()

  cust2.display_details()

  在这里,@cust_id、@cust_name 和 @cust_addr 是实例变量。这将产生以下结果:

  Customer id 1

  Customer name John

  Customer address Wisdom Apartments, Ludhiya

  Customer id 2

  Customer name Poul

  Customer address New Empire road, Khandala

  Ruby 类变量

  类变量以 @@ 开头,且必须初始化后才能在方法定义中使用。

  引用一个未初始化的类变量会产生错误。类变量在定义它的类或模块的子类或子模块中可共享使用。

  在使用 -w 选项后,重载类变量会产生警告。

  下面的实例显示了类变量的用法。

  #!/usr/bin/ruby

  class Customer

  @@no_of_customers=0

  def initialize(id, name, addr)

  @cust_id=id

  @cust_name=name

  @cust_addr=addr

  end

  def display_details()

  puts "Customer id #@cust_id"

  puts "Customer name #@cust_name"

  puts "Customer address #@cust_addr"

  end

  def total_no_of_customers()

  @@no_of_customers += 1

  puts "Total number of customers: #@@no_of_customers"

  end

  end

  # 创建对象

  cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")

  cust2=Customer.new("2", "Poul", "New Empire road, Khandala")

  # 调用方法

  cust1.total_no_of_customers()

  cust2.total_no_of_customers()

  在这里,@@no_of_customers 是类变量。这将产生以下结果:

  Total number of customers: 1

  Total number of customers: 2

  Ruby 局部变量

  局部变量以小写字母或下划线 _ 开头。局部变量的作用域从 class、module、def 或 do 到相对应的结尾或者从左大括号到右大括号 {}。

  当调用一个未初始化的局部变量时,它被解释为调用一个不带参数的方法。

  对未初始化的局部变量赋值也可以当作是变量声明。变量会一直存在,直到当前域结束为止。局部变量的生命周期在 Ruby 解析程序时确定。

  在上面的实例中,局部变量是 id、name 和 addr。

  Ruby 常量

  常量以大写字母开头。定义在类或模块内的常量可以从类或模块的内部访问,定义在类或模块外的常量可以被全局访问。

  常量不能定义在方法内。引用一个未初始化的常量会产生错误。对已经初始化的常量赋值会产生警告。

  #!/usr/bin/ruby

  class Example

  VAR1 = 100

  VAR2 = 200

  def show

  puts "Value of first Constant is #{VAR1}"

  puts "Value of second Constant is #{VAR2}"

  end

  end

  # 创建对象

  object=Example.new()

  object.show

  在这里,VAR1 和 VAR2 是常量。这将产生以下结果:

  Value of first Constant is 100

  Value of second Constant is 200

  Ruby 伪变量

  它们是特殊的变量,有着局部变量的外观,但行为却像常量。您不能给这些变量赋任何值。

  self: 当前方法的接收器对象。

  true: 代表 true 的值。

  false: 代表 false 的值。

  nil: 代表 undefined 的值。

  __FILE__: 当前源文件的名称。

  __LINE__: 当前行在源文件中的编号。

  本文转载自:w3cschool(编辑:雷林鹏 来源:网络)

雷林鹏分享:Ruby 变量的更多相关文章

  1. 雷林鹏分享:Ruby 循环

    Ruby 循环 Ruby 中的循环用于执行相同的代码块若干次.本章节将详细介绍 Ruby 支持的所有循环语句. Ruby while 语句 语法 while conditional [do] code ...

  2. 雷林鹏分享:Ruby 环境变量

    Ruby 环境变量 Ruby 解释器使用下列环境变量来控制它的行为.ENV 对象包含了所有当前设置的环境变量列表. 变量描述 DLN_LIBRARY_PATH动态加载模块搜索的路径. HOME当没有参 ...

  3. 雷林鹏分享:Ruby 安装 - Windows

    Ruby 安装 - Windows 下面列出了在 Windows 机器上安装 Ruby 的步骤. 注意:在安装时,您可能有不同的可用版本. 下载最新版的 Ruby 压缩文件.请点击这里下载. 下载 R ...

  4. 雷林鹏分享:Ruby 命令行选项

    Ruby 命令行选项 Ruby 一般是从命令行运行,方式如下: $ ruby [ options ] [.] [ programfile ] [ arguments ... ] 解释器可以通过下列选项 ...

  5. 雷林鹏分享:Ruby 语法

    Ruby 语法 让我们编写一个简单的 Ruby 程序.所有的 Ruby 文件扩展名都是 .rb.所以,把下面的源代码放在 test.rb 文件中. #!/usr/bin/ruby -w puts &q ...

  6. 雷林鹏分享:Ruby 类和对象

    Ruby 类和对象 Ruby 是一种完美的面向对象编程语言.面向对象编程语言的特性包括: 数据封装 数据抽象 多态性 继承 这些特性将在 面向对象的 Ruby 中进行讨论. 一个面向对象的程序,涉及到 ...

  7. 雷林鹏分享:Ruby 类案例

    Ruby 类案例 下面将创建一个名为 Customer 的 Ruby 类,您将声明两个方法: display_details:该方法用于显示客户的详细信息. total_no_of_customers ...

  8. 雷林鹏分享:Ruby 运算符

    Ruby 运算符 Ruby 支持一套丰富的运算符.大多数运算符实际上是方法调用.例如,a + b 被解释为 a.+(b),其中指向变量 a 的 + 方法被调用,b 作为方法调用的参数. 对于每个运算符 ...

  9. 雷林鹏分享:Ruby 块

    Ruby 块 您已经知道 Ruby 如何定义方法以及您如何调用方法.类似地,Ruby 有一个块的概念. 块由大量的代码组成. 您需要给块取个名称. 块中的代码总是包含在大括号 {} 内. 块总是从与其 ...

随机推荐

  1. 并发写Btree原理剖析

    OceanBase 0.4的UpdateServer存储引擎使用了一棵可以多线程并发修改的BTree,读写不冲突,由颜然 开发.线上运行稳定. UpdateServer存储引擎采用类leveldb的方 ...

  2. javascript闭包(Module模式)的用途和高级使用方式

    javascript闭包(Module模式)的用途和高级使用方式 javascript闭包的用途:1. 匿名自执行函数:或者可以理解为,避免污染全局变量2. 缓存:源于闭包的核心特性便是保存状态,应用 ...

  3. 获取Linux时间函数

    Linux下clock_gettime函数详解 要包含这头文件<time.h> 且在编译链接时需加上 -lrt ;因为在librt中实现了clock_gettime函数. --- stru ...

  4. 俞敏洪:未来教育是互联网+ AI +区块链联合颠覆

    “我对面向未来教育领域,内心是有一丝悲哀的.至少在我思考和理解的范围内,互联网和 AI 是不是有可能彻底的改变中国教育现状?我没有想清楚.”10 月 31 日,在鲸媒体举办的以“教育 +AI”为的主题 ...

  5. 循环ajax请求问题

    项目开发过程碰到过这种需求:需要循环发送ajax请求,请求参数和循环索引有关.第一次实现的时候用了类似下面的方法,结果发现发送到后端的参数数据都是最后一次循环的索引 for(var i=0; i< ...

  6. SNMP学习笔记之iReasoning MIB Browser

    0x00 MIB Browser iReasoning MIB浏览器是一个强大和易于使用的工具由iReasoning SNMP API提供支持. MIB浏览器是工程师管理启用SNMP的网络设备和应用程 ...

  7. 使用volley来json解析

    我对网络请求get和post的理解: 1.get只是从某网址获得固定数据,如我访问百度,返回就是百度的html语句: 2.post是我在访问的时候加了某些参数,如我访问某个服务器,访问的时候加了一些语 ...

  8. FJNUOJ the greed of Yehan(最长路 + 权值乘积转化)题解

    Description During the trip, Yehan and Linlin pass a cave, and there is a board at the door, which s ...

  9. TeeChart缩放

    //缩放的技巧 //首先找到待缩放的区域,例如横轴x1-x2,纵轴y1-y2 //那么待放到的区域就是x=x1;x=x2;y=y1;y=y2;这四条线组成的矩形 //首先确定矩形的左上角的坐标,然后确 ...

  10. HDU 1863 畅通工程 (最小生成树

    看卿学姐视频学到的题目 kruskal算法实现最小生成树 #include<bits/stdc++.h> using namespace std; ; typedef long long ...