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实例变量

实例变量以&commat ;.未初始化的实例变量的值为 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 Class Variables

类变量以@@开头.必须先进行初始化,然后才能在方法定义中使用.

引用未初始化的类变量会产生错误.类变量在定义类变量的类或模块的后代之间共享.

覆盖类变量会产生带-w选项的警告.

这是一个显示类变量&minus的用法的示例;

#!/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到相应的末尾,或者从块的左大括号到其大括号{}.

当未初始化的局部变量是引用时,它被解释为对没有参数的方法的调用.

对未初始化的局部变量的赋值也可用作变量声明.变量开始存在,直到达到当前范围的末尾. 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 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 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}

#!/usr/bin/ruby -w

puts "Multiplication Value : #{24*60*60}";

这将产生以下结果 :

Multiplication Value : 86400

反斜杠表示法

以下是Ruby&minus支持的反斜杠表示法列表;

符号代表字符
\ n换行符(0x0a) )
\ r回车(0x0d)
\fFormfeed(0x0c)
\ b退格(0x08)
\ a贝尔(0x07)
\ e逃生(0x1b)
\ s空格(0x20)
\ nnn八进制表示法(n为0-7)
\ xnn十六进制表示法(n为0-9,af或AF)
\ cx,\\ \\ _CxControl-x
\MxMeta-x(c | 0x80)
\M-\CxMeta-Control -x
\ x字符x

有关Ruby字符串的更多详细信息,请参阅 Ruby Strings .

Ruby Arrays

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 Arrays的更多详细信息,请参阅 Ruby Arrays .

Ruby Hashes

通过在大括号之间放置键/值对列表来创建文字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 .