Ruby 变量的类型
在Ruby中,有不同类型的变量。
- 本地变量
- 实例变量
- 类变量
- 全局变量
在Ruby中,每个变量都是通过在变量名称的开头使用一个特殊的字符来声明的,这在下表中提到。
符号 | 变量的类型 |
---|---|
[a-z] 或 _ |
本地变量 |
@ |
实例变量 |
@@ |
类变量 |
$ |
全局变量 |
本地变量: 本地变量的名字总是以 小写字母(a-z)或下划线(_) 开头 。 这些变量在声明它们的代码结构中是局部的。一个局部变量只能在其初始化的区块内访问。本地变量在方法之外是不可用的。没有必要对局部变量进行初始化。
例子
age = 10
_Age = 20
实例变量: 一个实例变量的名字总是以 @ 符号开头。它们类似于类变量,但它们的值是对象的特定实例的局部。实例变量在任何指定的实例或对象的方法中都是可用的,也就是说,实例变量可以从一个对象变为另一个对象。不需要初始化实例变量,未初始化的实例变量总是包含一个 nil 值。
例子
#!/usr/bin/ruby
# Ruby program to illustrate
# the Instance Variables
class Customer
def initialize(id, name, addr)
# Instance Variables
@cust_id = id
@cust_name = name
@cust_addr = addr
end
# displaying result
def display_details()
puts "Customer id #@cust_id"
puts "Customer name #@cust_name"
puts "Customer address #@cust_addr"
end
end
# Create Objects
cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2 = Customer.new("2", "Poul", "New Empire road, Khandala")
# Call Methods
cust1.display_details()
cust2.display_details()
输出
Customer id 1
Customer name John
Customer address Wisdom Apartments, Ludhiya
Customer id 2
Customer name Poul
Customer address New Empire road, Khandala
类变量 : 班级变量的名称总是以 @@ 符号开始。它可以在不同的对象中使用。类变量属于类,它是一个类的特征。它们在使用前需要被初始化。另一种思考类变量的方式是在单个类的范围内作为全局变量。一个类变量被该类的所有后代所共享。一个未初始化的类变量将导致一个错误。
例子
#!/usr/bin/ruby
# Ruby program to illustrate
# the Class Variables
class Customer
# class variable
@@no_of_customers = 0
def initialize(id, name, addr)
# An instance Variable
@cust_id = id
@cust_name = name
@cust_addr = addr
end
# displaying result
def display_details()
puts "Customer id #@cust_id"
puts "Customer name #@cust_name"
puts "Customer address #@cust_addr"
end
def total_no_of_customers()
# class variable
@@no_of_customers += 1
puts "Total number of customers: #@@no_of_customers"
end
end
# Create Objects
cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2 = Customer.new("2", "Poul", "New Empire road, Khandala")
# Call Methods
cust1.display_details()
cust1.total_no_of_customers()
cust2.display_details()
cust2.total_no_of_customers()
输出
Customer id 1
Customer name John
Customer address Wisdom Apartments, Ludhiya
Total number of customers: 1
Customer id 2
Customer name Poul
Customer address New Empire road, Khandala
Total number of customers: 2
全局变量: 全局变量的名字总是以 $ 开头 。 班级变量不能跨班使用。如果你想拥有一个可以跨类使用的单一变量,你需要定义一个全局变量。它的范围是全局的,意味着它可以在程序的任何地方被访问。默认情况下,未初始化的全局变量的值为零,它的使用会使程序变得隐蔽和复杂。
例子
#!/usr/bin/ruby
# Ruby program to illustrate
# the Global Variables
#!/usr/bin/ruby
# global variable
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 in Class1 is 10
Global variable in Class2 is 10