详解Ruby的五种变量

Ruby支持的有五种类型的变量,分别是全局变量、实例变量、类变量、局部变量、常量、伪变量,下面为大家详细的讲解一下Ruby的五种变量。

Ruby 全局变量

全局变量以 $ 开头。未初始化的全局变量的值为 nil,在使用 -w 选项后,会产生警告。 给全局变量赋值会改变全局状态,所以不建议使用全局变量。 下面的实例显示了全局变量的用法。 实例

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

$global_variable = 10
class Class1
 def print_global
     puts "全局变量在 Class1 中输出为 #$global_variable"
 end
end
class Class2
 def print_global
     puts "全局变量在 Class2 中输出为 #$global_variable"
 end
end

class1obj = Class1.new
class1obj.print_global
class2obj = Class2.new
class2obj.print_global

在这里,$global_variable 是全局变量。这将产生以下结果: 注意:在 Ruby 中,您可以通过在变量或常量前面放置 # 字符,来访问任何变量或常量的值。

全局变量在 Class1 中输出为 10
全局变量在 Class2 中输出为 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
# -*- coding: UTF-8 -*-

class Example
  VAR1 = 100
  VAR2 = 200
  def show
      puts "第一个常量的值为 #{VAR1}"
      puts "第二个常量的值为 #{VAR2}"
  end
end

# 创建对象
object=Example.new()
object.show

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

第一个常量的值为 100
第二个常量的值为 200

Ruby 伪变量

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

  • 1.self: 当前方法的接收器对象。
  • 2.true: 代表 true 的值。
  • 3.false: 代表 false 的值。
  • 4.nil: 代表 undefined 的值。
  • 5.
    FILE: 当前源文件的名称。
  • 6.
    LINE: 当前行在源文件中的编号。

原创文章,作者:晴川运维,如若转载,请注明出处:https://baike.qcidc.com/7987.html

(0)
晴川运维晴川运维
上一篇 2025年6月11日
下一篇 2025年6月11日

相关推荐

  • 详解Linux chkconfig 命令

    Linux chkconfig 命令用于检查,设置系统的各种服务。这是Red Hat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各…

    Linux系统 2025年9月20日
  • 浅谈Base64编码原理

    Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于 2的6次方是64,所以每6个比特为一个单元,对应某个可打印字符。3个字节有24个比特,对应于4个Base64…

    Linux系统 2025年6月17日
  • CentOS7中安装Weblogic具体步骤

    WebLogic是美国Oracle公司出品的一个application server确切的说是一个基于JAVAEE架构的中间件,BEA WebLogic是用于开发、集成、部署和管理…

    Linux系统 2025年6月8日
  • 详解观察者模式

    在现实世界中,许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变。例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心;还有,…

    Linux系统 2025年6月8日
  • 如何使用 Ansible 安装软件

    使用 Ansible 剧本自动安装和更新设备上的软件。 Ansible 是系统管理员和开发人员用来保持计算机系统处于最佳状态的一种流行的自动化工具。与可扩展框架一样,Ansible…

    Linux系统 2025年6月8日
  • Linux中通过osquery监控文件的完整性

    osquery 是 SQL 驱动的分析和监控操作系统的工具,是操作系统分析框架,支持 OS X 和 Linux 系统。osquery 能帮助监控和分析低水平的操作系统,提供更直观的…

    Linux系统 2025年6月8日
  • Linux下设置共享文件夹具体方法

    公司和学校机房的电脑都处在同一个局域网,如果两台电脑传输大文件,用U盘或移动硬盘可能不太方便,害怕中毒,这时候最好的方式是建立一个共享文件夹,另一台电脑即可在局域网中访问该共享文件…

    Linux系统 2025年6月8日
  • Linux系统zypper命令使用实例

    zypper 是一个简单易用的命令行包管理器,它使用了一个软件包管理库叫做 libzypp 。Zypper 能够操作软件安装源 (比如 Build Service 或 标准 ope…

    Linux系统 2025年6月4日
  • 常见的MySQL高可用设计方案

    MySQL高可用设计方案,如果单MySQL的优化始终还是顶不住压力时,这个时候我们就必须考虑MySQL的集群方案了,目前可行的方案有: image-2022010212341719…

    Linux系统 2025年10月20日
  • Linux中配置HAProxy实现Web负载均衡

    HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。 一、测试环境 HAPr…

    Linux系统 2025年6月19日

发表回复

登录后才能评论