局部变量
以小写字母或下划线开头的标识符在 Ruby 中即为局部变量(如果引用未被声明的标识符则会被解释成无参数的方法调用)。
val
=
5
if
false
虽然 val 未被赋值,但声明还是有效的,此时 val 的值是 nil(相当于 C# 中的 null)。
实例变量
所有实例变量都是 @ 字符打头的标识符,未被初始化的实例变量值为 nil。
class Employee
@empId
end
@empId
end
类变量
以 @@ 开头的标识符是类变量。在 module 中定义的模块变量能够被所有包含该 module 的类访问。
1
module Company
2 @@companyName = " Hello Ruby. "
3
4 class Employee
5 def display
6 print " #@companyName "
7 end
8 end
9
10 class Department
11 def display
12 print " #@companyName "
13 end
14 end
15 end
2 @@companyName = " Hello Ruby. "
3
4 class Employee
5 def display
6 print " #@companyName "
7 end
8 end
9
10 class Department
11 def display
12 print " #@companyName "
13 end
14 end
15 end
全局变量
全局变量无需声明,所有以 $ 开始的标识符都是全局变量,能够在程序的任何地方引用它,未赋值的全局变量值为 nil。
1
module Company
2 class Employee
3 def display
4 # nil
5 print " #$companyName "
6 $companyName = " Hello Ruby. "
7 end
8 end
9
10 class Department
11 def display
12 # Hello Ruby.
13 print " #$companyName "
14 end
15 end
16 end
2 class Employee
3 def display
4 # nil
5 print " #$companyName "
6 $companyName = " Hello Ruby. "
7 end
8 end
9
10 class Department
11 def display
12 # Hello Ruby.
13 print " #$companyName "
14 end
15 end
16 end
伪变量
在 Ruby 中有一种被称为伪变量的标识符,伪变量有一点像环境变量,同时它也是只读的。
#
当前方法的执行主体
print " #{self} "
# NilClass类的唯一实例
print " #{nil} "
# TrueClass 类的唯一实例
print " #{true} "
# FalseClass 类的唯一实例
print " #{false} "
# 当前源文件名
print " #{__FILE__} "
# 当前源文件中的行号
print " #{__LINE__} "
print " #{self} "
# NilClass类的唯一实例
print " #{nil} "
# TrueClass 类的唯一实例
print " #{true} "
# FalseClass 类的唯一实例
print " #{false} "
# 当前源文件名
print " #{__FILE__} "
# 当前源文件中的行号
print " #{__LINE__} "
常量
以大写字母打头的标识符是常量,对常量进行二次赋值解释器会提示警告,而引用未被赋值的常量实抛出 NameError 异常。在类、模块外部定义的常量属于 Object,可以使用“::常量名”引用属于 Object 的常量,以“模块名/类名::常量名”的形式引用外部的常量。
1
#
属于 Object 的常量
2 GroupName = " 心守家园 "
3
4 module Site
5 SiteUrl = " http://www.you2v.com "
6
7 class Sichuan
8 Add = " 凉山 "
9 # 引用属于 Object 的常量
10 print " #{::GroupName} "
11 end
12 end
13
14 # 直接引用类名、模块名
15 # 引用属于 Object 的模块时可以省略“::”
16 print " #{::Site}\n#{Site::Sichuan} "
17 # 属于模块的常量
18 print " #{Site::SiteUrl} "
19 # 属于类的常量
20 print " #{Site::Sichuan::Add} "
2 GroupName = " 心守家园 "
3
4 module Site
5 SiteUrl = " http://www.you2v.com "
6
7 class Sichuan
8 Add = " 凉山 "
9 # 引用属于 Object 的常量
10 print " #{::GroupName} "
11 end
12 end
13
14 # 直接引用类名、模块名
15 # 引用属于 Object 的模块时可以省略“::”
16 print " #{::Site}\n#{Site::Sichuan} "
17 # 属于模块的常量
18 print " #{Site::SiteUrl} "
19 # 属于类的常量
20 print " #{Site::Sichuan::Add} "
当引用模块和类中同名的常量时,优先引用嵌套树外侧的常量, Object 的优先度最低,不过我建议大家尽量不使用同名常量。