Monday, October 20, 2008

(2)变量

变量就是一个值得名字,创建一个变量的过程就是给这个变量赋值,如果变量出现在等号的左边就是把这个变量的引用赋值给另一个变量。在Ruby中有4中不同类型的变量,以$开头的变量是全局变量,它在整个应用程序中都是有效的;以@和@@开头的变量代表实例变量和类变量;如果变量以下划线_或者消息字母开头,则说明这个变量是一个局部变量。如果在变量中有::说明你要定义一个静态变量比如Math::PI。如果出现点号. 说明你要调用变量所代表的对象的一个方法。Ruby在开始运行的时候还会初始化一系列的全局变量,有关这部分我们后面会讲到。
通常情况下你应该在使用变量前先给变量赋值,或者说初始化这个变量。在某些情况下,你也可以不初始化变量,这在Ruby中是允许的,不过必须遵循一定的规则:
  • 类变量:对于类变量,在使用之前你必须给它赋值,否则你会得到一个NameError的异常。
  • 实例变量:如果你使用了一个未初始化的实例变量,你会得到一个nil值,通常这不是好的编程习惯,如果你打开Ruby的-w选项你会得到一个警告信息。
  • 全局变量:和实例变量一样,如果你使用了未初始化的实例变量,你会得到一个nil值。
  • 局部变量:局部变量比较复杂,因为和其他变量不同,它没有一个明确的符号标记,标明它是一个局部变量还是一个方法调用。如果Ruby解析器识别到一个变量被赋值了,那么它知道这是一个局部变量而不是方法,如果没有赋值操作,Ruby会把它当作是一个方法调用,如果没有这样一个方法,哦,你会得到一个NameError异常。通常,如果一个局部变量没有明确的赋值,Ruby会认为它的值是nil。比如:

a = 0.0 if false    # 这个赋值操作永远不会执行。
print a # 打印nil,即使存在这样一个变量,但是它的值为nil。
print b # NameError: 不存在的变量或者方法。

No comments: