- Ruby 基础
- Ruby - 首页
- Ruby - 概述
- Ruby - 环境设置
- Ruby - 语法
- Ruby - 类和对象
- Ruby - 变量
- Ruby - 运算符
- Ruby - 注释
- Ruby - IF...ELSE
- Ruby - 循环
- Ruby - 方法
- Ruby - 代码块
- Ruby - 模块
- Ruby - 字符串
- Ruby - 数组
- Ruby - 哈希
- Ruby - 日期和时间
- Ruby - 范围
- Ruby - 迭代器
- Ruby - 文件输入/输出
- Ruby - 异常
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 # 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 类变量
类变量以 @@ 开头,并且必须在可以在方法定义中使用它们之前对其进行初始化。
引用未初始化的类变量将会产生错误。类变量在定义类变量的类或模块的后代之间共享。
覆盖类变量将会产生 -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 局部变量
局部变量以小写字母或 _ 开头。局部变量的范围从 class、module、def 或 do 到相应的 end,或者从代码块的左花括号到右花括号 {}。
引用未初始化的局部变量时,将把它解释为对无参数方法的调用。
对未初始化的局部变量进行赋值也如同变量声明。变量从声明到当前范围结束才会存在。局部变量的生命周期在 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 # Create Objects object = Example.new() object.show
此处 VAR1 和 VAR2 是常量。这将产生以下结果:
Value of first Constant is 100 Value of second Constant is 200
Ruby 伪变量
伪变量类似于本地变量,但行为类似于常量。不能为这些变量指定任何值。
self − 当前方法的接收器对象。
true − 表示真值的变量。
false − 表示假值的变量。
nil − 表示未定义的变量。
__FILE__ − 当前源文件的文件名。
__LINE__ − 源文件中的当前行号。
Ruby 基本文字
Ruby 对文字所使用的规则非常简单直观。本部分解释了所有基本的 Ruby 文字。
整数
Ruby 支持整数。整数的范围为 -230 至 230-1 或 -262 至 262-1。此范围内的整数为 Fixnum 类的对象,此范围外的整数存储在 Bignum 类的对象中。
编写整数时,可以使用可选的前导符号、可选的进制指示器(0 表示八进制、0x 表示十六进制或 0b 表示二进制),后跟相应进制的数字字符串。数字字符串中忽略下划线字符。
还可以获取 ASCII 字符对应的整数值,或使用问号前缀转义该序列。
示例
123 # Fixnum decimal 1_234 # Fixnum decimal with underline -500 # Negative Fixnum 0377 # octal 0xff # hexadecimal 0b1011 # binary ?a # character code for 'a' ?\n # code for a newline (0x0a) 12345678901234567890 # Bignum
注意 − 类和对象在教程的单独章节中进行了说明。
浮点数
Ruby 支持浮点数。它们也是数字,不过带有小数部分。浮点数是 Float 类的对象,可以为以下任何类型:
示例
123.4 # floating point value 1.0e6 # scientific notation 4E20 # dot not required 4e+20 # sign before exponential
字符串文字
Ruby 字符串是 8 位字节的序列,它们是 String 类的对象。双引号字符串允许替换和反斜杠符号,但单引号字符串不允许替换,仅允许使用反斜杠符号 \\ 和 \'
示例
#!/usr/bin/ruby -w puts 'escape using "\\"'; puts 'That\'s right';
这将产生以下结果:
escape using "\" That's right
可以使用序列 #{ expr } 将任何 Ruby 表达式的值代入字符串中。其中,expr 可以是任何 Ruby 表达式。
#!/usr/bin/ruby -w puts "Multiplication Value : #{24*60*60}";
这将产生以下结果:
Multiplication Value : 86400
反斜杠符号
以下是 Ruby 支持的反斜杠符号列表:
符号 | 表示的字符 |
---|---|
\n | 换行符 (0x0a) |
\r | 回车符 (0x0d) |
\f | 换页符 (0x0c) |
\b | 退格符 (0x08) |
\a | 铃声 (0x07) |
\e | 转义符 (0x1b) |
\s | 空格符 (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 | 字符 x |
有关 Ruby 字符串的更多详细信息,请参阅 Ruby 字符串。
Ruby 数组
Ruby 数组的文本通过在方括号之间放置一个以逗号分隔的对象引用系列来创建。忽略末尾的逗号。
示例
#!/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 数组。
Ruby 哈希
Ruby 哈希文本是通过在大括号之间放置键/值对列表来创建的,其中键和值之间带有逗号或 => 序列。忽略末尾的逗号。
示例
#!/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 哈希。
Ruby 范围
范围表示一个区间,即一个具有起始值和结束值的值集合。范围可以使用 s..e 和 s...e 文本或 Range.new 来构建。
使用 .. 构建的范围从起始值运行到结束值,含结束值。使用 ... 创建的范围不包含结束值。用作迭代器时,范围将返回序列中的每个值。
范围 (1..5) 表示它包含值 1、2、3、4、5,而范围 (1...5) 表示它包含值 1、2、3、4。
示例
#!/usr/bin/ruby (10..15).each do |n| print n, ' ' end
这将产生以下结果:
10 11 12 13 14 15
有关 Ruby 范围的更多详细信息,请参阅 Ruby 范围。