📅  最后修改于: 2020-10-16 05:48:34             🧑  作者: Mango
变量是存储位置,用于保存任何程序要使用的任何数据。
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
局部变量以小写字母或_开头。局部变量的范围从类,模块,定义或do到相应的末端,或从块的右括号到其右括号{}。
当引用未初始化的局部变量时,它将被解释为对没有参数的方法的调用。
分配给未初始化的局部变量也可以用作变量声明。变量开始存在,直到达到当前作用域的末尾。局部变量的生存期由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-当前方法的接收者对象。
真实的-值,表示真。
假-代表假的值。
nil-表示未定义的值。
__FILE__-当前源文件的名称。
__LINE__-源文件中的当前行号。
Ruby用于字面量的规则既简单又直观。本节介绍所有基本的Ruby 字面量。
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}序列将任何Ruby表达式的值替换为字符串。在这里,expr可以是任何红宝石表达式。
#!/usr/bin/ruby -w
puts "Multiplication Value : #{24*60*60}";
这将产生以下结果-
Multiplication Value : 86400
以下是Ruby支持的反斜杠表示法列表-
Notation | Character represented |
---|---|
\n | Newline (0x0a) |
\r | Carriage return (0x0d) |
\f | Formfeed (0x0c) |
\b | Backspace (0x08) |
\a | Bell (0x07) |
\e | Escape (0x1b) |
\s | Space (0x20) |
\nnn | Octal notation (n being 0-7) |
\xnn | Hexadecimal notation (n being 0-9, a-f, or A-F) |
\cx, \C-x | Control-x |
\M-x | Meta-x (c | 0x80) |
\M-\C-x | Meta-Control-x |
\x | Character x |
有关Ruby Strings的更多详细信息,请阅读Ruby Strings 。
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 Arrays 。
通过在括号之间放置键/值对的列表来创建字面量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哈希。
范围表示一个间隔,该间隔是一组带有开始和结束的值。可以使用s..e和s … e字面量构造范围,也可以使用Range.new构造范围。
使用..构造的范围从开始到结束都包括在内。使用…创建的那些不包括最终值。当用作迭代器时,range返回序列中的每个值。
范围(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 。