象大多数面向对象语言一样,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的权威指南,全面涵盖该语言的1.8版和1.9版。本书详尽但并不拘泥于语言规范,既适合首次接触Ruby的资深程序员,同样也适合那些想要挑战对这门语言的理解并更深入掌握它的Ruby程序员。本书...
类变量、全局变量、实例变量, 多态、为什么ruby、ruby编码规范
完整书名《Ruby Programming-向Ruby之父学程序设计》 ,就是那本经典的绿皮书 第一部分:通过简单的Ruby程序来介绍程序的基本架构。 第二部分:介绍基础语法规则,以及类、模块等面向对象程序设计的思考方法与...
Ruby语言入门教程
Ruby教程.chm和Ruby程序设计.doc,学习ruby快速入门。
中文Ruby语言入门教程,简单易学,适合初学者使用
Ruby语言程序设计by Grant Ren 于2006.11.24
Ruby语言教程:Ruby 变量示例
ruby语言入门教程(中文版)[PDF]
用Python,Lua和Ruby语言设计游戏,是python lua 和ruby的入门类书籍(英文版)
Ruby-程序设计RUBYRUBYRUBY PDF PDF
Ruby 方法、类 : Ruby 方法、类 ruby-9-method.mp4 ruby-9-method.mp4
Ruby程序设计268技.pdf
第二篇讲解Ruby语言的核心概念和语法,并综合这些概念和语法,以机器人小程序为例进行了实战开发;第三篇深入讲解Ruby on Rails 开发,以及怎么样用Ruby访问因特网和网络连接服务,最后还对大量非常有用的Ruby程序库...
从程序所需要的变量、常数、方法、类、控制结构等语法的说明,到类的主要使用方法、简单的应用等,尽可能都浅显地加以解说。您若是自己动手玩过HTML这样的读者,应该就能充分活用《Ruby Programming:向Ruby之父学...
RUBY语言入门教程
使用Ruby和GitHub API构建Action的快速入门配方