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

详细解析Ruby中的变量

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

 变量持有要使用的程序的数据的存储位置。

Ruby支持的有五种类型的变量。在前面的章节中已经经历了一个简短描述以及这些变量。本章中介绍的这五种类型的变量。
Ruby的全局变量:

全局变量以$开头。未初始化的全局变量的值是零,并使用-w选项产生警告。

全局变量的赋值会改变全局状态。这是不推荐使用全局变量。他们使得程序的含义模糊。

下面是一个例子显示使用全局变量。

#!/usr/bin/ruby$global_variable = 10class Class1 def print_global   puts "Global variable in Class1 is #$global_variable" endendclass Class2 def print_global   puts "Global variable in Class2 is #$global_variable" endendclass1obj = Class1.newclass1obj.print_globalclass2obj = Class2.newclass2obj.print_global

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

注意: 在Ruby中,把一个哈希号(#)字符,在任意变量或常量之前能够访问它的值。

Global variable in Class1 is 10
Global variable in Class2 is 10

Ruby的实例变量:

实例变量@开始。未初始化的实例变量的值是零,并产生警告-w选项。

下面是一个例子显示使用实例变量。

#!/usr/bin/rubyclass 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"  endend# Create Objectscust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")cust2=Customer.new("2", "Poul", "New Empire road, Khandala")# Call Methodscust1.display_details()cust2.display_details()

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

Customer id 1Customer name JohnCustomer address Wisdom Apartments, LudhiyaCustomer id 2Customer name PoulCustomer address New Empire road, Khandala

Ruby的类变量:

类变量以@@开始,它们可以被用来在方法定义之前必须初始化。

引用未初始化的类变量产生错误。类变量之间共享其中的类变量定义的类或模块的的后代。

覆盖类变量产生警告-w选项。

下面是一个例子显示使用类变量:

#!/usr/bin/rubyclass 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"  endend# Create Objectscust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")cust2=Customer.new("2", "Poul", "New Empire road, Khandala")# Call Methodscust1.total_no_of_customers()cust2.total_no_of_customers()            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表