学习:ruby类
一、创建类:
class Car
#@@run_times是类变量,
@@run_times = 0
#类初始化,就如其他语言的构造函数
def initialize(_color)
#@color是实例变量, 实例变量用于在对象中保存对象
@color = _color
end
def set_color(_color)
@color=_color
end
#get_color是一个实例方法
def get_color
@color
end
# running 也是一个实例方法,就好比to_s方法
def running
@@run_times += 1
puts "一辆#{ get_color }车在跑..."
end
end
1、创建对象:
mycar = Car.new("red") // new调用了 initialize方法创建对象
puts mycar.get_color
mycar. running
2、ruby的属性:
可读属性:
attr_reader:color
可写属性:
atter_writer:color
可读写属性:(Car.new.color="b")
attr_accessor:color
3、实例变量
Ruby规定实例变量是以@开头,后跟一个名字。对实例变量的访问注意
a、在类内部可以对其赋值和读取没有限制
b、类外不能直接访问对象的实例变量,只能通过方法访问。正如上面所说的属性访问方式一样。
c、实例变量在使用前不用必须初始化。
4、类变量:类变量在类的所有对象中共享,也能被我们后面介绍的类方法访问。一个具体的类变量在给定的类中只有一个拷贝。
@@run_times 表示所定义过车的总数量。
Ruby规定类变量是以两个@@开头,后跟一个名字。对于一个给定的类而言,类变量只存在一份拷贝。
注意:
1)、类变量必须在使用之前要初始化。
2)、类变量是私有的。要想能从类外部访问,必须定义方法访问。这个方法是一个实例方法,要么是一个类方法。
3)、通常类变量属于包含该变量的最内层的类或模块。但是,可以为被定义该变量的类的所有子类所共享
5、 Ruby 的常量也是对对象的引用,常量通常在第一次被赋值的时候创建(通常是在类或模块中定义)。和其他语言不一样,
Ruby允许改变常量的值,因为常量是对对象的引用,通过改变常量的值,可以改变它所引用的对象的内部状态。
1)、在类或模块中的任何位置都可以直接访问该类或模块中定义的常量。
2)、在类或模块外,可以通过在域作用符::前加上一个返回适当类或模块对象的表达式来访问。
3)、对于不属于任何类或模块的常量,可以直接访问或使用不带前缀的域作用符来访问
4)、通过在常量名之前使用类或模块名和域作用符,还可以将常量从外面添加到已存在的类或模块中。
注意:
1)、类名本身就是常量。这就意味着可以把类和其他Ruby对象一样对待:可以拷贝它们;将它们作为参数传入方法;或者在表达式中使用它们
2)、如果一个无名的类赋值给了一个常量。Ruby将常量作为类名。
6、怎么样定义一个类的方法,就如java中提到的静态方法,用类名可以直接调用:
def Car.sum
end
要用类名.方法,也可以用self.方法
7、Ruby的self在不同的环境中有不同的含义,这点和java的this不同,原因是java实际上只有一种环境--在class的实例方法定义中使用,
代表访问这个方法参数自动传进的那个对象。而由于ruby作为一个完全纯净的面向对象语言,任何东东都是对象,方法是对象,类也是对象...,
所以self就会有很多环境,区分不同环境的self含义才能更好的理解程序的含义
二、继承类:
class Bmw < Car
def initialize(_color, speed)
super(color)
..
end
end
Bmw继承了父类的构造函数,使用super函数调用同时,get_color等方法也继承了。
1、super的使用:
1、在initialize中使用super,将调用其父类的initialize方法
2、在一般的实例方法中使用,将调用其父类中同名的方法。
向一个对象发送调用方法时,ruby的本质过程如下:
1、ruby将检查该对象所属的类,如果该类实现了该方法,就运行该方法
2、如果该类没有实现该方法,ruby将找到其直接父类中的方法,然后是其祖父类,凡此以往追溯整个祖先链
3、如果最终没有找到合适方法,ruby会产生一个特殊的行为,引发异常错误
2、重写方法,相当于覆盖:
class Bmw < Car
...
def running
@@run_times += 1
puts "一辆#{ get_color }车在飞奔..."
end
end
则会覆盖了父类Car的running方法
三、Ruby模块非常类似类, 除了:
> 模块不可以有实体
> 模块不可以有子类
> 模块由module...end定义.
1、一个模块对象也是Module的一个实例,这意味着所有的类都是模块。
2、模块有两种用法.其一是将相近的方法和实体放在一个相对集中的域里.
Ruby标准包里的Math模块就扮演着这一角色:
1.9.2-p320 :002 > Math.sqrt 4
=> 2.0
1.9.2-p320 :005 > Math::PI
=> 3.141592653589793
3、::操作符告诉 Ruby 解释器在哪里找常数的值(有可能其它模块用PI表示其它的一些东西).
如果我们想省掉 :: 直接调用一个模块的方法和常数,我们可以用 include:
1.9.2-p320 :006 > include Math
=> Object
1.9.2-p320 :007 > PI
=> 3.141592653589793
4、一些程序语言(如C++)提供了多重继承机制:一个类可以继承自多个超类。
例如,一个House可能继承自一个Building类(连同Office和Hospital类一起)。
尽管多重继承可能成为一种语言强有力的特征,
但是由于它会增加该语言的复杂性和歧义,因此许多面向对象语言都没有加入它。
(例如:java就没有多继承,但也可以用实现接口的方式来实现像多继承。)
Ruby支持单继承。然而,它还提供了mixin-它提供了多继承的许多特征。一个mixin是一种"模块"类型。
也就是模块的另一种用法。Ruby并未特意实现真正的多重继承,但糅和技术是一很好的替代.记得模块无法实体化或子类化;
但如果我们在类定义里include一个方法。
相关推荐
在企业运营过程中,半年度回顾总结报告是评估和规划未来工作的重要工具。它帮助企业了解过去六个月的业务表现,找出成功之处与不足,并为下半年的工作提供方向。以下是对这份"企业半年度回顾总结报告模板"中六个核心...
"C语言程序设计:回顾与总结.pdf" 本资源是一个关于C语言程序设计的课程回顾与总结,涵盖了C语言的基础知识和高级主题。下面是该资源的详细知识点总结: 绪论 * 程序设计语言的基本概念 * 程序设计的基本过程 * ...
不过,我们仍然可以根据可识别的信息片段,尝试提取出一些可能与“2021移动互联网数字经济二季度回顾”相关的知识点。 首先,“移动互联网数字经济”是指在移动互联网环境下产生的经济活动与价值创造。这种经济模式...
### 30年激活函数回顾性总结 #### 概述 在过去三十年中,神经网络及其在深度学习领域的应用已经成为了解决复杂问题的关键工具,并在众多领域展现出了非凡的能力。其中,激活函数(Activation Functions, AFs)作为...
本篇工作总结聚焦于2021年度二年级数学下册的教学实践,全面回顾了一学期的教学活动,并深入探讨了如何有效地进行教学设计、课堂实施和学生反馈。以下是对主要知识点的详细阐述: 1. **严谨备课**:教师在课前深入...
根据提供的文件内容,本文将详细解读“打造高绩效销售团队案例回顾总结-入职培训的内容设计”的知识点。以下是详细的内容总结: 一、团队建设的核心问题与解决方案 在打造高绩效销售团队时,首先需要面对的是如何...
本次的“项目管理培训回顾及总结0.ppt”探讨了在项目管理中常见的误区以及如何避免这些问题。培训的核心在于强调了专业管理人士应对未知情况的能力,并介绍了项目的三重限制:时间、质量和资源。在面对这些限制时,...
二、年度工作总结的内容 从标题和描述中可以看出,年度工作总结的内容包括以下几个方面: 1. 工作回顾:对过去一年工作的回顾和总结,包括成绩和不足。 2. 来年计划:对下一年的计划和目标的制定和宣布。 3. 人员...
在撰写小学二年级下册班主任工作总结时,我们需要全面回顾整个学期的教学工作,包括学生的学习进步、班级管理、教学方法的运用以及与家长的沟通等方面。以下是一些重要的知识点: 1. **学生成长与教学效果**:关注...
【大气扁平商务风2020年中工作总结回顾报告PPT模板】是一个设计精良的PPT模版,适用于制作各类商务场合的中期总结或回顾报告。此模板以其大气、扁平化的设计风格,展现出专业且现代的商务氛围,能够有效提升报告的...
标题中的“企业-策略专题报告:一季度大类资产回顾与二季度大类资产展望”表明了这份文档的主题,它是一份关于企业在第一季度大类资产表现的总结,并对第二季度的资产前景进行预测的策略报告。这类报告通常涉及金融...
【小学教案】这一主题下,本篇文档是一个针对五年级语文上册第二组"回顾·拓展二"的教学教案,旨在帮助学生深入理解并回顾本单元关于思乡情感的课文内容。教学目标主要分为两个方面: 1. **回顾与理解课文**:引导...
总结来说,回顾·拓展二是语文教学中的一个重要组成部分,它让学生在回味课堂知识的同时,提升语言表达能力,培养对文字的敏感性和审美意识。通过具体的诗词、故事和实例,学生不仅能学习到文学技巧,也能深化对情感...
6. **回顾与拓展**: - 教学目标:理解诗歌含义,了解作者,初步赏析诗歌的基调和意境。 - 以《元日》为例,学习古诗的解读方法。 - 分析王安石的生平及其作品中的政治抱负和情感表达。 7. **古诗解析**: - ...
在这篇总结中,我们将回顾过去一年的教学任务、园务管理,承认存在的不足,并展望2011年的未来发展。 一、教学任务的完成与创新 幼儿园的教学任务在2010年得到了全面的贯彻执行。我们坚持寓教于玩,寓教于乐的教学...
在IT行业中,项目总结是项目生命周期的最后一个重要环节,它为团队、管理层乃至整个组织提供了对项目执行情况的全面回顾。这份"项目总结模板"旨在帮助我们系统化地记录项目的关键信息,提炼经验教训,以便于未来项目...
在书中,作者们将这二十三种设计模式分成了三类,分别是创建型模式、结构型模式和行为型模式。 创建型模式包含了: 工厂方法模式( Factory Method ) 抽象工厂模式( Abstract Factory ) 单例模式( Singleton ...
【移动互联网数字经济二季度回顾】 移动互联网数字经济在2021年第二季度的表现呈现出一系列关键趋势。这份报告由知名分析机构发布,旨在总结该季度的主要发展和变化,为行业参与者提供有价值的洞察。 首先,报告...
【二年级少先队工作总结】是对本学期二(3)班少先队工作的全面回顾与总结,旨在评估和提升少先队员的思想道德品质和集体活动参与度。工作总结着重强调了以下几个方面的实施和成果: 1. **思想道德教育**:通过中队...
作者在过去的一年中,对涉足不同行业的系统集成需求也进行了一些回顾总结,主要包括视频监控项目与网络安全项目等。作者认为,项目方案设计是自己工作中的主要任务,但是如何提供解决方案完成工作,也经历了两个时期...