Ruby on Rails 入门之:(12) Ruby中的类变量、属性以及构造函数
2012-10-09 09:49
645 查看
1. 实例变量和类变量
Ruby系统提供了两种存放共享数据的变量,就是实例变量和类变量1.1 实例变量
实例变量用于在类的内部共享数据。在程序文件的顶层定义的实例变量对整个应用程序中顶层的表达式和函数都有效;在类和模块中定义的实例变量可以被当前类或模块中的表达式访问;在类方法中声明的实例变量可以被当前类下的所有方法使用。
定义类的实例变量以@符号开头。
在方法或者函数中声明的实例变量,只有在方法调用后才有效。
#encoding:gbk class Animal @color = "red"; def init @name = "animal"; end def show puts "#@color"; puts "#@name"; end end a = Animal.new a.show; a.init; puts "******************************"; a.show;
看一下输出结果:
watkins@watkins:~/temp/workspace/ruby$ ruby class3.rb ****************************** animal watkins@watkins:~/temp/workspace/ruby$
第一次输出的时候,什么都没有,可以看到在show方法中不能访问类中定义的实例变量。这个让我觉得有点别扭。。。
在方法中定义的实例变量,只有方法被调用以后才可以使用。
1.2 类变量
类变量可以在各个类之间共享数据,类变量以@@开头。#encoding:gbk @@master = "watkins"; class Animal @color = "red"; def init @name = "animal"; end def show puts "#@color"; puts "#@name"; puts "master is #@@master" end end a = Animal.new a.show; a.init; puts "******************************"; a.show; class Cat def show puts "master is #@@master"; end end c = Cat.new c.show;
类变量往往使用在整个应用程序范围内,通常保存一些程序级的配置性信息,他的修改将会影响整个应用程序的运行结果。
2. 类的属性
2.1 类属性
如果要为类的实例变量追加一个设置器,要为其创建一个设置方法。设置实例变量值的属性方法比较特殊,命名的时候需要用=作为后缀,而且必须设置一个方法参数。
#encoding:gbk @@master = "watkins"; class Animal @color = "red"; def init @name = "animal"; end def show puts "#@color"; puts "#@name"; puts "master is #@@master" end def name=(val) @name = val; end end a = Animal.new a.show; a.init; puts "******************************"; a.show; puts "******************************"; a.name = "aaaaaaaaaaaaa"; a.show; puts "******************************"; class Cat def show puts "master is #@@master"; end end c = Cat.new c.show;
2.2 属性标识符
在Ruby中,定义属性的标识符有4个,分别是attr, attr_reader, attr_writer, attr_accessor,这些不是Ruby的关键字,而是一些内建的方法,使用语法如下:attr :attr1, key
attr_reader :attr1, :attr2
attr_writer :attr1, :attr2
attr_accessor :attr1, :attr2
这里的:attr1是类中实例变量的名称,不过这里要把实例变量的前缀@换成冒号“:”,相当于符号变量,所以说这几个标识符是方法而不是关键字,因为他们使用符号变量作为了函数参数。
具体说明:
attr :根据布尔值数据key的值,定义一个可读写的属性,如果key为false,则设置访问权限为只读。
attr_reader: 定义一个或多个只读的属性
attr_writer: 定义一个或多个只写的属性
attr_accessor: 定义一个或多个读写的属性
3. 构造函数
Ruby的构造函数统一为initialize方法,当调用new获取一个新的对象的时候,就会自动的调用这个构造函数来初始化该对象。#encoding:gbk @@master = "watkins"; class Animal @color = "red"; def init @name = "animal"; end def show puts "#@color"; puts "#@name"; puts "master is #@@master" end def name=(val) @name = val; end end a = Animal.new a.show; a.init; puts "******************************"; a.show; puts "******************************"; a.name = "aaaaaaaaaaaaa"; a.show; puts "******************************"; class Cat def initialize(name,age) @name = name; @age = age; end def show puts "master is #@@master"; puts "#@name,#@age"; end end c = Cat.new("ccccc",15); c.show;
相关文章推荐
- Ruby on Rails 入门之:(21) ruby中代码块的使用以及动态执行代码
- Ruby on rails开发从头来(四十)- ActiveRecord基础(Boolean属性)
- Ruby on Rails 入门之:(3) Ruby中的多种字符串表示方法
- ruby on rails3 入门 ——尝鲜吧!骚年
- ruby on rails 指导入门 http://ihower.tw/rails3/firststep.html
- Ruby on rails Mac开发 入门笔记(一)
- Ruby on Rails 入门之:(25) Rails找不到数据库表解决办法
- ruby on rails界面常用控件写法以及rails常用方法
- Ruby on rails开发从头来(三十九)- ActiveRecord基础(访问属性)
- ruby on rails 自学笔记 (1)入门篇
- [ROR] ruby on rails 入门知识
- Ruby on Rails 入门之:(18) ruby线程控制,线程同步
- Ruby on Rails 入门之:(22) Ruby 中Time的使用
- Ruby on Rails的下载及安装以及开发环境的搭建
- Ruby on rails开发从头来(三十八)- ActiveRecord基础(列和属性)
- Ruby on rails开发从头来(三十八)- ActiveRecord基础(列和属性)
- Ruby on rails 2.0.2傻瓜入门之Hello world
- Ruby on Rails 入门之:(1) Ruby, Rails, gem, bundler相关软件的安装
- Ruby on Rails 入门之:(8) Ruby中条件语句
- Ruby on Rails学习拾遗(一)—字符串中插入变量