正文

ruby中的变量2007-03-12 15:53:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/daweizhao/23872.html

分享到:

Ruby 变量和常量的种类包括全局变量、实变量、局部变量和常量,都是靠其名称的第一个字符来区分的。通常变量的第二个字符开始是使用字母、数字或“_”,内部变量中有一部分是「’$’ + 1 个符号」的变量(请参考内部变量)。

变量和常量指定的是特定对象。变量和常量的赋值,是为了指定新的对象进行操作。所以代入对象不会生成新的拷贝。

全局变量

例子:

$foobar 

以“$”开头的变量就是全局变量,程序的任何地方都能引用(因此应用时要特别注意)。全局变量没有必要事先声明。引用尚未初始化的全局变量其值为 nil。

实变量

例子:

@foobar 

以“@”开头的变量就是实变量,属于特定的对象。实变量可以在其类或子类的方法中引用。引用尚未初始化的实变量其值为 nil。

属于个体对象的变量称为实变量。名称以 @ 开头的变量,自动作为实变量使用。局部变量只有在 def ~ end 等结构内部使用时才有效,然而使用实变量的话,只要其对象存在,变量的值就会被保存。实变量一般作为对象的属性来使用。

class Person
  def name
    return @name
  end
  def name=(name)
    @name = name
  end
  def hello
    print "我是" + @name + ""
  end
end

alex = Person.new
alex.name = "艾力克斯"
alex.hello                  # => 我是艾力克斯

局部变量

例子:

foobar 

以小写字母或“_”开头的标识符就是局部变量或方法调用。

在局部变量作用域(类、模块、方法定义的部分)中小写字母开头的标识符要初始赋值,这个赋值属于局部变量的声明。引用未声明的标识符会当作无参数的方法调用。

常量

例子:

FOOBAR 

以大写字母开头的标识符就是常量。常量的定义(和初始化)就是进行代入赋值,但是在方法里是不能定义的。访问未定义的常量会发生 NameError 异常。

常量可在类/模块中定义,除在该类/模块中可以引用外,该类的子类或嵌套该模块的类/模块中也能引用该常量。从外部引用常量要用到“::”运算符。

class Foo 
  FOO = ’FOO’ 
end 

class Bar < Foo 
  p FOO             # => "FOO" 
end 

p Foo::FOO          # => "FOO" 

而且,类和模块的名称也要和常量同时使用。

类和嵌套外侧存在同名常数时,会先引用嵌套外侧的常数。也就是说,引用常数时会先搜索嵌套关系的外侧,然后才会按照继承关系向上搜索。而顶层常数定义并不是位于嵌套外侧,所以在搜索了继承关系之后才能找到它。可见顶层常数的优先度很低。

另外,在类定义表达式生成类对象的同时,还会将类对象赋值给一个与该类同名的常数。从语法上讲,引用类名也就是引用该常数。若对与父类常数同名的常数进行赋值的话,则意味着在该类中定义一个新常数,而并不会对父类常数进行赋值。

伪变量

在普通变量以外,还有一种被称为伪变量的特殊变量。

self

当前方法的执行对象本身。

nil

NilClass 类唯一的实例。表示伪。

true

TrueClass 类唯一的实例。表示真。

false

FalseClass 类唯一的实例。表示伪。

不能更改伪变量的值。为伪变数代入赋值会出现语法错误。

阅读(2183) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册