-

变量是存储器位置,它保存任何程序要使用的数据。

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伪虚拟变量

它们是具有局部变量的外观的特殊变量,但是它的行为就像常量。您不能为这些变量分配任何值。

Ruby基本文字

Ruby用于文字的规则是简单直观的。本节将介绍所有基本的Ruby Literals。

Integers

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

- 类和对象在本教程的另一章中进行了说明。

float数字

Ruby支持整数。他们也是数字,但是小数位。浮点数是Float类的对象,可以是以下任何一个 -

123.4                # floating point value
1.0e6                # scientific notation
4E20                 # dot not required
4e+20                # sign before exponential

字符string文字

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数组

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