常量一般要求其值不用再改变了。这样不会运动的量不会产生丰富的且富于变化的时空效应。这里空间指它占用的内存空间,时间指它的值的变化特性。显然我们为了描述世界或着构造概念的时候,希望有些量在占用了内存空间后可以是随着时间来变化的,这时候我们需要定义变量。给该变量占用的内存区域取个名字就是该变量的名称,而该变量随着时间而变化的作用范围就是变量的作用域(因为你的程序将用时间来运行)。在内存空间里面的内容就是变量的值。
根据变量所在的作用域——即它的作用范围,可以将变量划分为:局部变量、全局变量、实例变量、类变量和特殊变量。
下面我们一一来理解这些变量:
1、局部变量
局部变量名以小写字母或下划线开头。
局部变量可以定义在:顶层对象、类、模块以及方法之中。也就是说:局部变量的作用域可以在顶层对象、类、模块以及方法之中。随着变量离开这些作用域,局部变量自然消失。当然你应该注意顶层对象的作用域是整个程序,程序结束时,在其中的局部变量消失。不过,只要局部变量没有分别定义在方法、类(包括其子类)、模块中(即各自的作用域中),你就无法访问到它,这时你如果没有直接使用到该变量时,程序运行可能暂时不会暴露其错误,但当你错误地认为该变量起作用的时候,NameError错误就会产生。
local = 110
def ok
puts local
end
class A
#puts local
def ok
puts local
end
end
module B
#puts local
def ok
puts local
end
end
puts defined?local
上面这个程序,当你试着去掉注释或调用这些方法而错误地想直接使用变量local时,错误就发生了。
要注意的是:局部变量要定义后才可以使用。
另外局部变量在过程块中的语法后面章节中叙述。
2、全局变量
全局变量在任何地方都可以访问,它以“$”开头。你不需要声明就可以使用一个全局变量,不过你要当心取到nil值。
def ok
$ok= "ok"
end
puts $ok
ok
puts $ok
php?name=Ruby" onclick="tagshow(event)" class="t_tag">Ruby已经定义了一系列的全局变量:
$!: 最近一次错误信息
$?: 最近一次执行的子进程退出的状况
$$:: 解释器进程ID
$*: 命令行参数
$0: Ruby当前运行程序的文件名
$\: 输出记录分隔符
$/: 输入记录分隔符
$=: 是否区分大小写标志
$n: 最近匹配的第n个子表达式
$~: 自表达式组的最近一次匹配
$&: 最近一次同正则表达式匹配的字符串
$.: 解释器最近读的行数
$_: gets最近读取的字符串
$@: 错误产生的位置