- Ruby基础知识
- Ruby - 主页
- Ruby - 概述
- Ruby - 环境设置
- Ruby - 语法
- Ruby - 类和对象
- Ruby - 变量
- Ruby - 运算符
- Ruby - 评论
- Ruby - IF...ELSE
- Ruby - 循环
- Ruby - 方法
- Ruby - 块
- Ruby - 模块
- Ruby - 字符串
- Ruby - 数组
- Ruby - 哈希
- Ruby - 日期和时间
- Ruby - 范围
- Ruby - 迭代器
- Ruby - 文件 I/O
- 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 局部变量
局部变量以小写字母或 _ 开头。局部变量的范围从类、模块、def 或 do 到相应的末尾,或者从块的左大括号到其右大括号 {}。
当引用未初始化的局部变量时,它将被解释为对没有参数的方法的调用。
对未初始化的局部变量的赋值也可用作变量声明。变量开始存在,直到到达当前作用域的末尾。局部变量的生命周期是在 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 伪变量
它们是特殊变量,具有局部变量的外观,但Behave类似于常量。您不能为这些变量分配任何值。
self - 当前方法的接收者对象。
true - 代表 true 的值。
false - 代表 false 的值。
nil - 表示未定义的值。
__FILE__ - 当前源文件的名称。
__LINE__ - 源文件中的当前行号。
Ruby 基本文字
Ruby 对文字使用的规则简单且直观。本节解释所有基本的 Ruby 文字。
整数
Ruby 支持整数。整数的范围可以是 -2 30到 2 30-1或 -2 62到 2 62-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、af 或 AF) |
\cx,\Cx | 控制-x |
\Mx | 元-x (c | 0x80) |
\M-\Cx | 元控制-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 Hash 是通过在大括号之间放置键/值对列表来创建的,在键和值之间使用逗号或序列 =>。后面的逗号将被忽略。
例子
#!/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 Hashes 的更多详细信息,请参阅Ruby Hashes。
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 Ranges 的更多详细信息,请参阅Ruby Ranges。