Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16497546
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:34:04

下载本文示例代码
  在许多情况中,当你设计你的应用程序时,你可能想实现一个方法仅为一个对象内部使用而不能为另外一些对象使用。Ruby提供了三个关键字来限制对方法的存取。  · Private:只能为该对象所存取的方法。  · Protected:可以为该对象和类实例和直接继承的子类所存取的方法。  · Public:可以为任何对象所存取的方法(Public是所有方法的默认设置)。  这些关键字被插入在两个方法之间的代码中。所有从private关键字开始定义的方法都是私有的,直到代码中出现另一个存取控制关键字为止。例如,在下面的代码中,accessor和area方法默认情况下都是公共的,而grow方法是私有的。注意,在此doubleSize方法被显式指定为公共的。一个类的initialize方法自动为私有的。 class Rectangleattr_accessor :height, :widthdef initialize (hgt, wdth)@height = hgt@width = wdthenddef area ()@height*@widthendprivate #开始定义私有方法def grow (heightMultiple, widthMultiple)@height = @height * heightMultiple@width = @width * widthMultiplereturn "New area:" area().to_sendpublic #再次定义公共方法def doubleSize ()grow(2,2)endend  如下所示,doubleSize可以在对象上执行,但是任何对grow的直接调用都被拒绝并且返回一个错误。 irb(main):075:0> rect2=Rectangle.new(3,4)=> #irb(main):076:0> rect2.doubleSize()=> "New area: 48"irb(main):077:0> rect2.grow()NoMethodError: private method 'grow' called for #from (irb):77from :0  默认情况下,在Ruby中,实例和类变量都是私有的,除非提供了属性accessor和mutator。   在许多情况中,当你设计你的应用程序时,你可能想实现一个方法仅为一个对象内部使用而不能为另外一些对象使用。Ruby提供了三个关键字来限制对方法的存取。  · Private:只能为该对象所存取的方法。  · Protected:可以为该对象和类实例和直接继承的子类所存取的方法。  · Public:可以为任何对象所存取的方法(Public是所有方法的默认设置)。  这些关键字被插入在两个方法之间的代码中。所有从private关键字开始定义的方法都是私有的,直到代码中出现另一个存取控制关键字为止。例如,在下面的代码中,accessor和area方法默认情况下都是公共的,而grow方法是私有的。注意,在此doubleSize方法被显式指定为公共的。一个类的initialize方法自动为私有的。 class Rectangleattr_accessor :height, :widthdef initialize (hgt, wdth)@height = hgt@width = wdthenddef area ()@height*@widthendprivate #开始定义私有方法def grow (heightMultiple, widthMultiple)@height = @height * heightMultiple@width = @width * widthMultiplereturn "New area:" area().to_sendpublic #再次定义公共方法def doubleSize ()grow(2,2)endend  如下所示,doubleSize可以在对象上执行,但是任何对grow的直接调用都被拒绝并且返回一个错误。 irb(main):075:0> rect2=Rectangle.new(3,4)=> #irb(main):076:0> rect2.doubleSize()=> "New area: 48"irb(main):077:0> rect2.grow()NoMethodError: private method 'grow' called for #from (irb):77from :0  默认情况下,在Ruby中,实例和类变量都是私有的,除非提供了属性accessor和mutator。 下载本文示例代码


Ruby程序快速入门之方法存取控制Ruby程序快速入门之方法存取控制Ruby程序快速入门之方法存取控制Ruby程序快速入门之方法存取控制Ruby程序快速入门之方法存取控制Ruby程序快速入门之方法存取控制Ruby程序快速入门之方法存取控制Ruby程序快速入门之方法存取控制Ruby程序快速入门之方法存取控制Ruby程序快速入门之方法存取控制Ruby程序快速入门之方法存取控制Ruby程序快速入门之方法存取控制Ruby程序快速入门之方法存取控制Ruby程序快速入门之方法存取控制Ruby程序快速入门之方法存取控制
阅读(139) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~