1.变量是持有可被任何程序使用的任何数据的存储位置。ruby
ruby支持5种类型的变量。dom
变量:通常小写字母、下划线开头spa
全局变量: $开头code
局部变量:@开头对象
类变量:@@开头,类变量被共享在整个继承链中继承
常数:大写字母开头生命周期
2.全局变量作用域
全局变量以 $ 开头。未初始化的全局变量的值为 nil,在使用 -w 选项后,会产生警告。it
给全局变量赋值会改变全局状态,因此不建议使用全局变量。class
#!/usr/bin/ruby -w # -*- coding: UTF-8 -*- $global_variable=10 class Class1 def print_global puts "全局变量在Class1中输出为#$global_variable" end end class Class2 def print_global puts "全局变量在Class2中输出为#$global_variable" end end class1 = Class1.new class1.print_global class2 = Class2.new class2.print_global #全局变量在Class1中输出为10 #全局变量在Class2中输出为10
3.实例变量
实例变量以 @ 开头。未初始化的实例变量的值为 nil,在使用 -w 选项后,会产生警告。
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 # 建立对象 cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya") cust2=Customer.new("2", "Poul", "New Empire road, Khandala") # 调用方法 cust1.display_details() cust2.display_details() cust1.total_no_of_customers()
4.类变量
类变量以 @@ 开头,且必须初始化后才能在方法定义中使用。
引用一个未初始化的类变量会产生错误。类变量在定义它的类或模块的子类或子模块中可共享使用。
在使用 -w 选项后,重载类变量会产生警告
5.局部变量
局部变量以小写字母或下划线 _ 开头。局部变量的做用域从 class、module、def 或 do 到相对应的结尾或者从左大括号到右大括号 {}。
当调用一个未初始化的局部变量时,它被解释为调用一个不带参数的方法。
对未初始化的局部变量赋值也能够看成是变量声明。变量会一直存在,直到当前域结束为止。局部变量的生命周期在 Ruby 解析程序时肯定。
在上面的实例中,局部变量是 id、name 和 addr。
6.ruby常量
常量以大写字母开头。定义在类或模块内的常量能够从类或模块的内部访问,定义在类或模块外的常量能够被全局访问。
常量不能定义在方法内。引用一个未初始化的常量会产生错误。对已经初始化的常量赋值会产生警告。
class Example VAR1=100 VAR2=200 def show puts "第一个常量的值是#{VAR1}" puts "第二个常量的值是#{VAR2}" end end emp=Example.new emp.show
7.ruby伪变量
它们是特殊的变量,有着局部变量的外观,但行为却像常量。您不能给这些变量赋任何值。