象大多数面向对象语言一样,Ruby类也允许定义类变量和方法。一个类变量允许在一个类的所有实例间共享单个变量。在Ruby中,两个@@号用于指示类变量。例如,如果你想要使一个BankAccount类的所有实例共享相同的利息率,那么该类可能被如下定义:
class BankAccount @@interestRate = 6.5 def BankAccount.getInterestRate() @@interestRate end attr_accessor :balance def initialize (bal) @balance = bal end end |
如你所见,类变量必须在使用前初始化,并且就象实例变量一样,如果你想存取类变量的话,你需要编写存取器方法。在此,我定义了一个类方法来返回利息率。注意,类名和在getInterestRate前面的句号表示一个类方法。一个类方法,不管对于任何实例,其工作方式都是相同的-在此,是把相同的利息率返回到所有的BankAccount实例。为了调用类方法,你需要使用类名,就象它使用于类方法定义中一样:
irb(main):045:0> BankAccount.getInterestRate => 6.5 |
事实上,用于创建类实例的"new"方法就是一个类方法。因此,当你在程序中输入"Rectangle.new"时,你实际在调用new类方法-这是Ruby默认情况下所提供的。
继承
面向对象编程的原则之一是支持类层次结构。就象自然界中的事物分类一样,类允许从更为通用的类进行继承。面向对象编程的特征主要体现在方法和变量的使用上。例如,一个Square类继承Rectangle类的一些特征,如方法和变量。一个Square是一种更具体类型的Rectangle(高度和宽度相等的Rectangle实例),但是它仍然有一个高度和宽度,也有一个面积(而且与矩形的计算方法相同)。在Ruby中,Square类可以使用下列定义创建:
class Square < Rectangle end |
"<Rectangle"意味着,Square是Rectangle的一个子类,或反过来说,Rectangle是Square的一个超类。默认情况下,一个Square实例自动地拥有所有一个Rectangle所拥有的相同的属性和方法,包括height,width和area方法。为了确保Square实例的边长相等,你可以重载现有的Square的initialize方法:
class Square < Rectangle def initialize (size) @height = size @width = size end end |
因为在Ruby中一切都是对象,所以Ruby中的一切几乎都派生自Object类。尽管这在所有类定义中都不是显式的(你不会看到<Object出现在定义中),但是的确所有的类都派生自Ruby的基类Object。知道这个事实后,你就会更容易地理解接下来要讨论的内容。
当编写你的应用程序时,你可以在一个类定义外定义方法。在本文开始,你已看到了一个并不是任何一个类的一部分的摄氏到华氏转换器方法。作为另外一个示例,下面是一个位于任何类之外的方法:
def feel? return "I feel fine." end |
为了执行这个方法,只要输入该方法名,而不需要类或实例:
irb(main):042:0> feel? => "I feel fine." |
此方法看似另外一种语言(如C)中的函数或过程。事实上,尽管这些方法看上去好象不属于任何类,但是这些方法却都是你已经添加到Object类上的方法,它(因为Object是所有类的超类)反过来也把这一方法添加到你的继承类上。因此,现在你可以在任何对象(如Square和Rectangle的实例)甚至一个类(如Rectangle类)上调用这个方法。
irb(main):043:0> sq1=Square.new(4) => #<Square:0x5a18b50 @width=4, @height=4> irb(main):044:0> rect1=Rectangle.new(5,7) => #<Rectangle:0x5a139a8 @width=7, @height=5> irb(main):045:0> sq1.feel? => "I feel fine." irb(main):046:0> rect1.feel? => "I feel fine." irb(main):047:0> Rectangle.feel? => "I feel fine." |
分享到:
相关推荐
本教程旨在为初学者提供一个全面的Ruby语言入门指南,帮助他们快速掌握这门语言的基础知识。 首先,Ruby的核心设计理念是“人本主义”,这意味着它强调代码的可读性和程序员的生产力。Ruby的语法清晰,易于理解,...
本教程“Ruby语言入门教程v1.0”旨在为初学者提供一个通俗易懂的学习路径,帮助他们快速掌握Ruby的基础知识。教程将从Ruby语言的起源和发展讲起,介绍其设计理念和主要特性,使学习者对Ruby有一个全面的认识。 Ruby...
本入门教程“Ruby语言入门教程v1”旨在帮助初学者快速掌握Ruby的基础知识和核心概念,以便能轻松地进行编程。 Ruby的起源: Ruby由日本人松本行弘在1995年创造,其设计目标是强调程序员的生产力和代码的可读性。它...
这使得Ruby程序具有高度的可扩展性和自定义性。 在学习Ruby时,了解类和模块的概念至关重要。类是对象的蓝图,定义了一组属性和行为;模块则用于封装相关的方法,提供命名空间和混入(mix-in)功能,可以将模块的...
本教程“Ruby语言入门教程v1.0.pdf”是针对初学者设计的,旨在帮助读者快速掌握Ruby的基础知识。 一、Ruby基础 1. 变量:Ruby中的变量分为局部变量、实例变量、类变量和全局变量,它们有不同的标识符开头,如 `$`...
Ruby是一种面向对象的、动态...通过阅读《Ruby入门书籍》和相关文档,你将能够掌握Ruby的基础和进阶知识,理解其编程哲学,并能开始编写自己的Ruby程序。记得实践是检验理解的最好方式,边学边练,不断探索Ruby的魅力。
### Ruby语言入门教程V1.0 #### 一、概述 在《Ruby语言入门教程V1.0》中,作者张开川系统地介绍了Ruby语言的基础知识及其在实际开发中的应用。本教程不仅适合初学者快速掌握Ruby语言的核心概念和技术要点,同时也...
2. 变量和数据类型:介绍Ruby中的局部变量、实例变量、类变量和全局变量,以及基本数据类型如整数、浮点数、字符串、数组、哈希等。 3. 控制结构:讲解if、unless、while、for等控制流语句的用法。 4. 函数和方法:...
1. **变量与常量**:Ruby中的变量分为局部变量、实例变量、类变量和全局变量等不同类型。常量则用于存储固定不变的数据。 2. **数据类型**:包括数值类型(整型、浮点型等)、字符串、数组、哈希表等。 3. **控制...
Ruby是一种高级、面向对象的脚本语言,由日本的松本行弘(Yukihiro Matsumoto)在1993年设计并开发,旨在提供一种更简洁、更优雅的编程体验。本教程将带你从入门到精通,深入理解Ruby语言的各个方面。 ### 第一部分...
Ruby语言入门教程是一本专为初学者设计的指南,旨在帮助读者快速掌握Ruby编程语言以及其流行的Web开发框架Rails的基础知识。Ruby是一种面向对象的、动态的、灵活的编程语言,以其简洁、清晰的语法著称,使得代码易于...
1. **Ruby基础语法**:了解Ruby的变量(局部变量、实例变量、类变量和全局变量)、常量、数据类型(包括字符串、数字、布尔值、数组、哈希等)以及控制结构(如条件语句、循环和范围表达式)。 2. **面向对象编程**...
1. **基础语法**:Ruby的基础语法包括变量(局部变量、实例变量、类变量和全局变量)、常量、符号、字符串、数字以及条件语句(如if、unless、case)和循环(如for、while、until)。 2. **面向对象**:Ruby是一种...
Ruby中的变量不需要声明类型,变量名前的 `$`、`@` 或 `@@` 分别表示全局变量、实例变量和类变量。Ruby支持多种基本数据类型,包括但不限于: - 字符串:如`message = "Hello Ruby"` - 数字:如`number = 42` - 布尔...
"Ruby从入门到精通"是一套专为初学者设计的学习资料,旨在帮助那些没有编程背景的人快速掌握Ruby语言。 首先,让我们从基础开始。Ruby的基础语法包括变量、数据类型、控制结构(如if语句、循环)以及函数。变量在...
1. 变量:Ruby有四种基本类型的变量,分别是局部变量(以小写字母或下划线开头)、实例变量(以`@`开头)、类变量(以`@@`开头)和全局变量(以`$`开头)。它们各自的作用域不同,理解这些变量的使用方式是学习Ruby...
《Ruby 语言入门教程》是一本面向初学者的编程指南,旨在帮助读者快速掌握Ruby语言的基础知识。Ruby是一种面向对象的、动态类型的编程语言,它以其简洁、优雅的语法和强大的功能深受开发者喜爱,尤其在Web开发领域...