Ruby 简明教程
Ruby - Variables, Constants and Literals
变量是程序用来保存数据的内存位置。
Ruby 支持五种类型的变量。在上一章你也已经简要地了解了这些变量。这五个类型的变量将在本节进行讲解。
Ruby Global Variables
全局变量以 $ 开头。未初始化的全局变量具有 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 是一个全局变量。这会产生以下结果:
NOTE - 在 Ruby 中,你可以在变量或常量的前面加上井号字符(#)来访问该变量或常量的值。
Global variable in Class1 is 10
Global variable in Class2 is 10
Ruby Instance Variables
实例变量以 @ 开头。未初始化的实例变量具有 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
# 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()
这里,@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 Class Variables
类变量以 @@ 开头,并且必须在可以在方法定义中使用它们之前对其进行初始化。
引用未初始化的类变量会产生错误。类变量在定义了类变量的类或模块的后代中共享。
覆盖类变量会使用 -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
# Create Objects
cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2 = Customer.new("2", "Poul", "New Empire road, Khandala")
# Call Methods
cust1.total_no_of_customers()
cust2.total_no_of_customers()
此处 @@no_of_customers 是一个类变量。该类变量将生成以下结果:
Total number of customers: 1
Total number of customers: 2
Ruby Local Variables
局部变量以小写字母或 _ 开头。局部变量作用域范围从类、模块、def 或 do 到相应的 end,或从代码块的花括号开头到结尾 {}。
引用未初始化的局部变量时,将将其解释为一种对此方法的调用,此方法无参数。
对未初始化局部变量的赋值还可用作变量声明。变量在当前作用域结束之前一直存在。在 Ruby 解析程序时确定局部变量的生命周期。
在以上示例中,局部变量为 id、name 和 addr。
Ruby Constants
常量以大写字母开头。可以在定义它们所在类的模块内访问类或模块中定义的常量,也可以全局访问定义在类或模块外部的常量。
不可在方法内定义常量。引用未初始化的常量将导致错误。对已初始化的常量进行赋值将产生警告。
#!/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
# Create Objects
object = Example.new()
object.show
此处 VAR1 和 VAR2 为常量。该类常量将生成以下结果:
Value of first Constant is 100
Value of second Constant is 200
Ruby Pseudo-Variables
它们是既表现为局部变量、又表现为常量形式的特殊变量。你无法为这些变量赋予任何值。
-
self − 当前方法的接收者对象。
-
true − 表示 true 的值。
-
false − 表示 false 的值。
-
nil − 表示未定义的值。
-
FILE − 当前源代码文件的名称。
-
LINE − 当前源代码文件的行号。
Integer Numbers
Ruby 支持整数。整数的范围可以从 -230 到 230-1 或从 -262 到 262-1。在此范围内的整数是 Fixnum 类的对象,而超出此范围的整数则存储在 Bignum 类的对象中。
你可以使用可选的前置符号、可选的进制指示符(8 进制为 0,16 进制为 0x,2 进制为 0b),后跟用相应进制表示的一串数字来编写整数。连字符字符在数字字符串中将被忽略。
你还可以获取与 ASCII 字符对应的整数值,或通过使其前置一个问号来转义序列。
String Literals
Ruby 字符串只是 8 位字节的序列,它们是 String 类的对象。双引号字符串允许替换和反斜杠表示法,但单引号字符串不允许替换,只允许对 \\ 和 \' 使用反斜杠表示法
Backslash Notations
以下列出了 Ruby 支持的反斜杠表示法 −
Notation |
Character represented |
\n |
Newline (0x0a) |
\r |
Carriage return (0x0d) |
\f |
Formfeed (0x0c) |
\b |
Backspace (0x08) |
\a |
Bell (0x07) |
\e |
Escape (0x1b) |
\s |
Space (0x20) |
\nnn |
八进制表示法(n 为 0-7) |
\xnn |
十六进制表示法(n 为 0-9、a-f 或 A-F) |
\cx, \C-x |
Control-x |
\M-x |
Meta-x (c |
0x80) |
\M-\C-x |
Meta-Control-x |
\x |
有关 Ruby 字符串的更多详细信息,请参阅 Ruby Strings 。
Ruby Arrays
Ruby 数组的字面意思是由在方括号之间放置逗号分隔的对象引用序列创建的。忽略结尾逗号。
Example
#!/usr/bin/ruby
ary = [ "fred", 10, 3.14, "This is a string", "last element", ]
ary.each do |i|
puts i
end
这会产生以下结果 −
fred
10
3.14
This is a string
last element
有关 Ruby 数组的更多详细信息,请参阅 Ruby Arrays 。
Ruby Hashes
字面 Ruby 哈希是通过将键值对列表放置在大括号内创建的,键和值之间用逗号或序列 ⇒ 隔开。忽略结尾逗号。
Example
#!/usr/bin/ruby
hsh = colors = { "red" => 0xf00, "green" => 0x0f0, "blue" => 0x00f }
hsh.each do |key, value|
print key, " is ", value, "\n"
end
这会产生以下结果 −
red is 3840
green is 240
blue is 15
有关 Ruby 哈希的更多详细信息,请参阅 Ruby Hashes 。
Ruby Ranges
范围表示一个区间,这是一个具有一定值和结尾的间隔。可以使用 s..e 和 s…e 字面值或使用 Range.new 构建范围。
使用 .. 构建的范围从头到尾(含)。使用 … 创建的那些范围不包括结尾值。作为一个迭代器时使用范围,范围返回序列中的每个值。
范围 (1..5) 表示它包括 1、2、3、4、5 值,范围 (1…5) 表示它包括 1、2、3、4 值。
Example
#!/usr/bin/ruby
(10..15).each do |n|
print n, ' '
end
这会产生以下结果 −
10 11 12 13 14 15
有关 Ruby 范围的更多详细信息,请参阅 Ruby Ranges 。