在许多情况中,当你设计你的应用程序时,你可能想实现一个方法仅为一个对象内部使用而不能为另外一些对象使用。Ruby提供了三个关键字来限制对方法的存取。
- · Private:只能为该对象所存取的方法。
- · Protected:可以为该对象和类实例和直接继承的子类所存取的方法。
- · Public:可以为任何对象所存取的方法(Public是所有方法的默认设置)。
这些关键字被插入在两个方法之间的代码中。所有从private关键字开始定义的方法都是私有的,直到代码中出现另一个存取控制关键字为止。例如,在下面的代码中,accessor和area方法默认情况下都是公共的,而grow方法是私有的。注意,在此doubleSize方法被显式指定为公共的。一个类的initialize方法自动为私有的。
class Rectangle attr_accessor :height, :width def initialize (hgt, wdth) @height = hgt @width = wdth end def area () @height*@width end private #开始定义私有方法 def grow (heightMultiple, widthMultiple) @height = @height * heightMultiple @width = @width * widthMultiple return "New area:" + area().to_s end public #再次定义公共方法 def doubleSize () grow(2,2) end end |
如下所示,doubleSize可以在对象上执行,但是任何对grow的直接调用都被拒绝并且返回一个错误。
irb(main):075:0> rect2=Rectangle.new(3,4) => #<Rectangle:0x59a3088 @width=4, @height=3> irb(main):076:0> rect2.doubleSize() => "New area: 48" irb(main):077:0> rect2.grow() NoMethodError: private method 'grow' called for #<Rectangle:0x59a3088 @width=8, @height=6> from (irb):77 from :0 |
默认情况下,在Ruby中,实例和类变量都是私有的,除非提供了属性accessor和mutator。
分享到:
相关推荐
《Ruby程序设计语言》是Ruby的权威指南,全面涵盖该语言的1.8版和1.9版。本书详尽但并不拘泥于语言规范,既适合首次接触Ruby的资深程序员,同样也适合那些想要挑战对这门语言的理解并更深入掌握它的Ruby程序员。本书...
Ruby语言入门教程
完整书名《Ruby Programming-向Ruby之父学程序设计》 ,就是那本经典的绿皮书 第一部分:通过简单的Ruby程序来介绍程序的基本架构。 第二部分:介绍基础语法规则,以及类、模块等面向对象程序设计的思考方法与...
Ruby教程.chm和Ruby程序设计.doc,学习ruby快速入门。
中文Ruby语言入门教程,简单易学,适合初学者使用
Ruby语言程序设计by Grant Ren 于2006.11.24
ruby语言入门教程(中文版)[PDF]
Ruby-程序设计RUBYRUBYRUBY PDF PDF
Ruby程序设计268技.pdf
完整的Ruby程序设计基础教程 完整的Ruby程序设计基础教程
全书分为三篇:第一篇介绍编程以及Ruby的基本概念,并用简单的例子快速引导读者开发真正的Ruby应用程序;第二篇讲解Ruby语言的核心概念和语法,并综合这些概念和语法,以机器人小程序为例进行了实战开发;第三篇深入...
[Ruby.Programming_向Ruby之父学程序设计(第2版)].(日)高桥征义,(日)后藤裕藏.扫描版(ED2000.COM).pdf ) 带书签
RUBY语言入门教程
程序设计语言按照用户的要求有过程式语言和非过程式语言之分。过程式语言的主要特征是,用户可以指明一列可顺序执行的运算,以表示相应的计算过程,如FORTRAN、COBOL、PASCAL等。 按照应用范围,有通用语言与专用...
Matz 认为Python 是面向对象和过程化程序设计语言(Procedural Programming Language)的混合产物。Matz希望找到的是一种比 Perl更强大、比Python更面向对象的语言,但是很遗憾, 这样的语言当时在地球上并不存在。...
ruby的基础语言,如果使用ruby编程,测试框架的搭建