变量是存储器位置,它保存任何程序要使用的数据。
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
实例变量以@开头。未初始化的实例变量的值为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
类变量以@@开始,并且必须先进行初始化,然后才能在方法定义中使用。
引用未初始化的类变量会产生错误。类变量在定义类变量的类或模块的后代中共享。
覆盖类变量使用-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
局部变量以小写字母或_开头。局部变量的范围从class,module,def或do到相应的end或从块的开放大括号到其关闭大括号{}。
当引用未初始化的局部变量时,它被解释为对没有参数的方法的调用。
对未初始化的局部变量的分配也用作变量声明。变量开始存在,直到达到当前作用域的结尾。当Ruby解析程序时,确定局部变量的生命周期。
在上面的例子中,局部变量是id,name和addr。
常数以大写字母开头。在类或模块中定义的常量可以从该类或模块中访问,并且可以全局访问在类或模块外部定义的常量。
方法中可能不会定义常量。引用未初始化的常量会产生错误。对已经初始化的常量进行分配会产生警告。
#!/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
它们是具有局部变量的外观的特殊变量,但是它的行为就像常量。您不能为这些变量分配任何值。
self - 当前方法的接收者对象。
true - 值表示true。
false - 表示false的值。
无 - 表示未定义的值。
__FILE__ - 当前源文件的名称。
__LINE__ - 源文件中的当前行号。
Ruby用于文字的规则是简单直观的。本节将介绍所有基本的Ruby Literals。
Ruby支持整数。的整数的范围可以从-2 30到2 30-1或-2 62到2 62-1。在此范围内的整数是Fixnum类的对象,并且此范围之外的整数存储在Bignum类的对象中。
您可以使用可选的前导符号,可选的基本指示符(0表示八进制,0x表示十六进制,或0b代表二进制)写入整数,后跟相应基数字符string。下划线字符在数字字符string中被忽略。
您还可以获取与ASCII字符相对应的整数值,或者通过使用问号来排除序列。
123 # Fixnum decimal 1_234 # Fixnum decimal with underline -500 # Negative Fixnum 0377 # octal 0xff # hexadecimal 0b1011 # binary ?a # character code for "a" ? # 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字符string是8位字节的简单序列,它们是String类的对象。双引号字符string允许替换和反斜杠符号,但单引号字符string不允许替换,并允许仅对和"进行反斜杠符号
#!/usr/bin/ruby -w puts "escape using """; puts "That"s right";
输出结果如下 -
escape using "" That"s right
您可以使用序列#{expr}将任何Ruby表达式的值替换为字符string。在这里,expr可以是任何ruby表达式。
#!/usr/bin/ruby -w puts "Multiplication Value : #{24*60*60}";
输出结果如下 -
Multiplication Value : 86400
以下是Ruby支持的反斜杠符号列表 -
符号 | 字符代表 |
---|---|
n | 换行(0x0a) |
r | 回车(0x0d) |
F | Formfeed(0x0c) |
b | 退格(0x08) |
一个 | 贝尔(0x07) |
e | 逃脱(0x1b) |
s | 空格(0x20) |
nnn | 八进制符号(n为0-7) |
xnn | 十六进制符号(n为0-9,af或AF) |
cx, Cx | Control-x |
Mx | Meta-x(c | 0x80) |
M- Cx | 元控制x |
X | 字符x |
有关Ruby字符string的更多详细信息,请访问Ruby字符string。
Ruby Array的文字通过在方括号之间放置逗号分隔的一系列对象引用来创建。后面的逗号被忽略。
#!/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哈希是通过在一个大括号之间放置一个键/值对的列表来创建的,逗号或键和值之间的序列=>。后面的逗号被忽略。
#!/usr/bin/ruby hsh = colors = { "red" => 0xf00, "green" => 0x0f0, "blue" => 0x00f } hsh.each do |key, value| print key, " is ", value, " " end
输出结果如下 -
red is 3840 green is 240 blue is 15
有关Ruby Hash的更多细节,请浏览Ruby Hash。
一个范围代表一个间隔。一组开始和结束的值。可以使用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。