Ruby变量是用于保存在程序中使用的数据的位置。 每一个变量都有不一样的名称。 这些变量名称基于一些命名约定。 不像其余编程语言,在Ruby中没必要先声明变量再使用。 只须要一个前缀来指示它就能够了。shell
Ruby中有四种类型的变量:编程
局部变量名以小写字母或下划线(_
)开头。变量可在它的初始化块内或范围内访问。代码块完成后,变量就不在做用域存在了。ruby
当未初始化的局部变量被调用时,它们被解释为对没有参数的方法的调用。yii
类变量名以@@
符号开头。须要在使用前进行初始化。 类变量属于整个类,能够从类中的任何位置访问。 若是在一个实例中该值将被更改,则它将在每一个实例中被改变。编程语言
类变量由类的全部后代共享,未初始化的类变量将致使错误。code
示例:作用域
建立一个Ruby文件:class-variables.rb,编写如下代码 -get
#!/usr/bin/ruby class States @@no_of_states=0 def initialize(name) @states_name=name @@no_of_states += 1 end def display() puts "State name #@state_name" end def total_no_of_states() puts "Total number of states written: #@@no_of_states" end end # Create Objects first=States.new("Assam") second=States.new("Meghalaya") third=States.new("Maharashtra") fourth=States.new("Pondicherry") # Call Methods first.total_no_of_states() second.total_no_of_states() third.total_no_of_states() fourth.total_no_of_states()
在上面的例子中,@@no_of_states
是一个类变量。it
执行上面代码,输出结果以下:table
F:\worksp\ruby>ruby class-variables.rb Total number of states written: 4 Total number of states written: 4 Total number of states written: 4 Total number of states written: 4 F:\worksp\ruby>
实例变量名以@
符号开头。 它属于类的一个实例,能够从方法中的类的任何实例访问。 它们只能访问一个特定的类的实例。
它们不须要初始化,未初始化的实例变量的值是:nil
。
示例:
建立一个Ruby文件:instance-variables.rb,编写如下代码 -
#!/usr/bin/ruby class States def initialize(name) @states_name=name end def display() puts "States name #@states_name" end end # Create Objects first=States.new("Hainan") second=States.new("GuangDong") third=States.new("Beijing") fourth=States.new("ShangDong") # Call Methods first.display() second.display() third.display() fourth.display()
执行上面代码,输出结果以下:
F:\worksp\ruby>ruby instance-variables.rb States name Hainan States name GuangDong States name Beijing States name ShangDong F:\worksp\ruby>
全局变量名以$
号开头。在全局范围内可访问,能够从程序中的任何位置访问它。
未初始化的全局变量的值会被初始化为:nil
。建议不要使用全局变量,由于它们使程序变得秘密和复杂。
Ruby中有一些预约义的全局变量。
示例:
建立一个Ruby文件:global-variables.rb,编写如下代码 -
#!/usr/bin/ruby $global_var = "GLOBAL" class One def display puts "Global variable in One is #$global_var" end end class Two def display puts "Global variable in Two is #$global_var" end end oneobj = One.new oneobj.display twoobj = Two.new twoobj.display
执行上面代码,输出结果以下:
F:\worksp\ruby>ruby global-variables.rb Global variable in One is GLOBAL Global variable in Two is GLOBAL F:\worksp\ruby>
如下是上面几种类型变量的归纳 -
特性 | 局部变量 | 全局变量 | 实例变量 | 类变量 |
---|---|---|---|---|
范围 | 仅限于初始化块内 | 全局范围 | 属于一个类的一个实例 | 仅限于建立它们的整个类 |
命名约定 | 以小写字母或下划线(_ )开头 |
以$ 符号开头 |
以@ 符号开头 |
以@@ 符号开头 |
初始化 | 不须要初始化,未初始化的局部变量被解释为没有参数的方法 | 不须要初始化,未初始化的全局变量的值为:nil 。 |
不须要初始化,未初始化的实例变量的值为:nil 。 |
须要在使用前进行初始化,未初始化的全局变量会致使错误。 |