Ruby程序快速入門之方法存取控制

發表于:2007-04-27來源:作者:點擊數: 標簽:方法ruby程序存取快速
在許多情況中,當你設計你的應用程序時,你可能想實現一個方法僅為一個對象內部使用而不能為另外一些對象使用。 Ruby 提供了三個關鍵字來限制對方法的存
  在許多情況中,當你設計你的應用程序時,你可能想實現一個方法僅為一個對象內部使用而不能為另外一些對象使用。Ruby提供了三個關鍵字來限制對方法的存取。

  · Private:只能為該對象所存取的方法。

  · Protected:可以為該對象和類實例和直接繼承的子類所存取的方法。

  · Public:可以為任何對象所存取的方法(Public是所有方法的默認設置)。

  這些關鍵字被插入在兩個方法之間的代碼中。所有從private關鍵字開始定義的方法都是私有的,直到代碼中出現另一個存取控制關鍵字為止。例如,在下面的代碼中,aclearcase/" target="_blank" >ccessor和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。

原文轉自:http://www.anti-gravitydesign.com

...
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97