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 范围

广告