Ruby变量是用于保存在程序中使用的数据的位置。 每个变量都有不同的名称。 这些变量名称基于一些命名约定。 不像其他编程语言,在Ruby中不必先声明变量再使用。 只需要一个前缀来指示它就可以了。
Ruby中有四种类型的变量:
- 局部变量
- 类变量
- 实例变量
- 全局变量
1. 局部变量
局部变量名以小写字母或下划线(_
)开头。变量可在它的初始化块内或范围内访问。代码块完成后,变量就不在作用域存在了。
当未初始化的局部变量被调用时,它们被解释为对没有参数的方法的调用。
2. 类变量
类变量名以@@
符号开头。需要在使用前进行初始化。 类变量属于整个类,可以从类中的任何位置访问。 如果在一个实例中该值将被更改,则它将在每个实例中被改变。
类变量由类的所有后代共享,未初始化的类变量将导致错误。
示例:
创建一个Ruby文件:class-variables.rb,编写以下代码 -
#!/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
是一个类变量。
执行上面代码,输出结果如下:
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>
3. 实例变量
实例变量名以@
符号开头。 它属于类的一个实例,可以从方法中的类的任何实例访问。 它们只能访问一个特定的类的实例。
它们不需要初始化,未初始化的实例变量的值是: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>
4. 全局变量
全局变量名以$
号开头。在全局范围内可访问,可以从程序中的任何位置访问它。
未初始化的全局变量的值会被初始化为: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 。 |
需要在使用前进行初始化,未初始化的全局变量会导致错误。 |