变量是内存位置,它包含任何程序使用的任何数据.
Ruby支持五种类型的变量.您已经在前一章中对这些变量进行了一些小的描述.本章将介绍这五种变量.
Ruby全局变量
全局变量以$开头.未初始化的全局变量的值为nil,并使用-w选项生成警告.
分配给全局变量会改变全局状态.不建议使用全局变量.它们使程序变得神秘.
这是一个显示全局变量用法的例子.
#!/usr/bin/ruby$global_variable = 10class Class1 def print_global puts "Global variable in Class1 is #$global_variable" endendclass Class2 def print_global puts "Global variable in Class2 is #$global_variable" endendclass1obj = Class1.newclass1obj.print_globalclass2obj = Class2.newclass2obj.print_global
这里$ global_variable是一个全局变量.这将产生以下结果 :
注意 : 在Ruby中,您可以通过在该变量或常量之前放置一个哈希(#)字符来访问任何变量或常量的值.
Global variable in Class1 is 10Global variable in Class2 is 10
Ruby实例变量
实例变量以&commat ;.未初始化的实例变量的值为 nil ,并使用-w选项生成警告.
以下是显示实例变量用法的示例.
#!/usr/bin/rubyclass 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" endend# Create Objectscust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya")cust2 = Customer.new("2", "Poul", "New Empire road, Khandala")# Call Methodscust1.display_details()cust2.display_details()
此处,@ cust_id ,@ cust_name和@ cust_addr是实例变量.这将产生以下结果 :
Customer id 1Customer name JohnCustomer address Wisdom Apartments, LudhiyaCustomer id 2Customer name PoulCustomer address New Empire road, Khandala
Ruby Class Variables
类变量以@@开头.必须先进行初始化,然后才能在方法定义中使用.
引用未初始化的类变量会产生错误.类变量在定义类变量的类或模块的后代之间共享.
覆盖类变量会产生带-w选项的警告.
这是一个显示类变量&minus的用法的示例;
#!/usr/bin/rubyclass 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" endend# Create Objectscust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya")cust2 = Customer.new("2", "Poul", "New Empire road, Khandala")# Call Methodscust1.total_no_of_customers()cust2.total_no_of_customers()
这里@@ no_of_customers是一个类变量.这将产生以下结果 :
Total number of customers: 1Total number of customers: 2
Ruby局部变量
局部变量以小写字母或_开头.局部变量的范围从class,module,def或do到相应的末尾,或者从块的左大括号到其大括号{}.
当未初始化的局部变量是引用时,它被解释为对没有参数的方法的调用.
对未初始化的局部变量的赋值也可用作变量声明.变量开始存在,直到达到当前范围的末尾. Ruby解析程序时确定局部变量的生命周期.
在上面的例子中,局部变量是id,name和addr.
Ruby常量
常量以大写字母开头.可以从该类或模块中访问类或模块中定义的常量,并且可以全局访问在类或模块外部定义的常量.
可能无法在方法中定义常量.引用未初始化的常量会产生错误.对已经初始化的常量进行赋值会产生警告.
#!/usr/bin/rubyclass Example VAR1 = 100 VAR2 = 200 def show puts "Value of first Constant is #{VAR1}" puts "Value of second Constant is #{VAR2}" endend# Create Objectsobject = Example.new()object.show
这里VAR1和VAR2是常量.这将产生以下结果 :
Value of first Constant is 100Value of second Constant is 200
Ruby Pseudo-Variables
它们是具有局部变量外观但行为类似于常量的特殊变量.您无法为这些变量分配任何值.
self : 当前方法的接收者对象.
true : 值代表true.
false : 表示错误的值.
nil : 表示未定义的值.
__ FILE __ : 当前源文件的名称.
__ LINE __ : 源文件中的当前行号.
Ruby Basic Literals
Ruby使用的规则文字简单直观.本节介绍所有基本的Ruby Literals.
整数
Ruby支持整数.整数可以从-2 30 到2 30-1 或-2 62 到2 62-1 .此范围内的整数是类 Fixnum 的对象,此范围之外的整数存储在类 Bignum 的对象中.
您写入整数使用可选的前导符号,可选的基本指示符(对于八进制为0,对于十六进制为0x,对于二进制为0b),后跟相应基数中的一串数字.数字字符串中将忽略下划线字符.
您还可以获取与ASCII字符对应的整数值,或通过在其前面加上问号来转义序列.
示例
123 # Fixnum decimal1_234 # Fixnum decimal with underline-500 # Negative Fixnum0377 # octal0xff # hexadecimal0b1011 # binary?a # character code for 'a'?\n # code for a newline (0x0a)12345678901234567890 # Bignum
注意 : 类和对象在本教程的单独章节中进行了解释.
浮点数
Ruby支持浮点数.它们也是数字,但带小数.浮点数是类 Float 的对象,可以是以下任何一个 :
示例
123.4 # floating point value1.0e6 # scientific notation4E20 # dot not required4e+20 # sign before exponential
字符串文字
Ruby字符串只是8位字节的序列,它们是String类的对象.双引号字符串允许替换和反斜杠表示法,但单引号字符串不允许替换,只允许反斜杠表示法为\\和\'
示例
#!/usr/bin/ruby -wputs 'escape using "\';puts 'That\'s right';
这将产生以下结果 :
escape using "That's right
您可以使用序列#{expr}
#!/usr/bin/ruby -wputs "Multiplication Value : #{24*60*60}";
这将产生以下结果 :
Multiplication Value : 86400
反斜杠表示法
以下是Ruby&minus支持的反斜杠表示法列表;
符号 | 代表字符 |
---|---|
\ n | 换行符(0x0a) ) |
\ r | 回车(0x0d) |
\f | Formfeed(0x0c) |
\ b | 退格(0x08) |
\ a | 贝尔(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 | Meta-Control -x |
\ x | 字符x |
有关Ruby字符串的更多详细信息,请参阅 Ruby Strings .
Ruby Arrays
Ruby Array的文字是通过在方括号之间放置逗号分隔的一系列对象引用来创建的.尾随逗号被忽略.
示例
#!/usr/bin/rubyary = [ "fred", 10, 3.14, "This is a string", "last element", ]ary.each do |i| puts iend
这将产生以下结果 :
fred103.14This is a stringlast element
有关Ruby Arrays的更多详细信息,请参阅 Ruby Arrays .
Ruby Hashes
通过在大括号之间放置键/值对列表来创建文字Ruby Hash,使用逗号或序列=>密钥和价值之间.尾随逗号被忽略.
示例
#!/usr/bin/rubyhsh = colors = { "red" => 0xf00, "green" => 0x0f0, "blue" => 0x00f }hsh.each do |key, value| print key, " is ", value, "\n"end
这将产生以下结果 :
red is 3840green is 240blue 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 .