Ruby 变量和常量的种类包括全局变量、实变量、局部变量和常量,都是靠其名称的第一个字符来区分的。通常变量的第二个字符开始是使用字母、数字或“_”,内部变量中有一部分是「’$’ + 1 个符号」的变量(请参考内部变量)。 变量和常量指定的是特定对象。变量和常量的赋值,是为了指定新的对象进行操作。所以代入对象不会生成新的拷贝。 例子: 以“$”开头的变量就是全局变量,程序的任何地方都能引用(因此应用时要特别注意)。全局变量没有必要事先声明。引用尚未初始化的全局变量其值为 nil。 例子: 以“@”开头的变量就是实变量,属于特定的对象。实变量可以在其类或子类的方法中引用。引用尚未初始化的实变量其值为 nil。 属于个体对象的变量称为实变量。名称以 @ 开头的变量,自动作为实变量使用。局部变量只有在 def ~ end 等结构内部使用时才有效,然而使用实变量的话,只要其对象存在,变量的值就会被保存。实变量一般作为对象的属性来使用。 例子: 以小写字母或“_”开头的标识符就是局部变量或方法调用。 在局部变量作用域(类、模块、方法定义的部分)中小写字母开头的标识符要初始赋值,这个赋值属于局部变量的声明。引用未声明的标识符会当作无参数的方法调用。 例子: 以大写字母开头的标识符就是常量。常量的定义(和初始化)就是进行代入赋值,但是在方法里是不能定义的。访问未定义的常量会发生 NameError 异常。 常量可在类/模块中定义,除在该类/模块中可以引用外,该类的子类或嵌套该模块的类/模块中也能引用该常量。从外部引用常量要用到“::”运算符。 而且,类和模块的名称也要和常量同时使用。 类和嵌套外侧存在同名常数时,会先引用嵌套外侧的常数。也就是说,引用常数时会先搜索嵌套关系的外侧,然后才会按照继承关系向上搜索。而顶层常数定义并不是位于嵌套外侧,所以在搜索了继承关系之后才能找到它。可见顶层常数的优先度很低。 另外,在类定义表达式生成类对象的同时,还会将类对象赋值给一个与该类同名的常数。从语法上讲,引用类名也就是引用该常数。若对与父类常数同名的常数进行赋值的话,则意味着在该类中定义一个新常数,而并不会对父类常数进行赋值。 在普通变量以外,还有一种被称为伪变量的特殊变量。 当前方法的执行对象本身。 NilClass 类唯一的实例。表示伪。 TrueClass 类唯一的实例。表示真。 FalseClass 类唯一的实例。表示伪。 不能更改伪变量的值。为伪变数代入赋值会出现语法错误。全局变量
$foobar
实变量
@foobar
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
class Foo
FOO = ’FOO’
end
class Bar < Foo
p FOO # => "FOO"
end
p Foo::FOO # => "FOO"
伪变量
正文
ruby中的变量2007-03-12 15:53:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/daweizhao/23872.html
阅读(2183) | 评论(0)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论