變量與賦值
至此,你是否注意到前面所有的示例代碼中都缺少某種東西?難道你必須輸入常數,實例變量或類變量?絕對不是!這正是Ruby的真正面向對象的天性的一部分。為此,首先讓我們看一下Ruby中以前的普通變量。至此,你已經創建了很多Rectangle實例,但是你并沒有把它們保留多長時間。比方說,你想要把一個變量賦值給你創建的一個Rectangle實例:
myRectangle=Rectangle.new(4,5) |
在Ruby中這是完全有效的代碼,而且根本不需要另一行代碼來把myRectangle類型化或聲明為引用Rectangle的某種東西。在執行這一行代碼以后,變量myRectangle就引用一個Rectangle的實例(高度和寬度值分別為4,5)。但是,這僅是一種在任何時刻都可以更改的對象引用,而與對象的類型無關(在Ruby中一切都是對象)。因此,下面的命令提示符行中,你可以容易地把myRectangle賦值給一個字符串:
irb(main):049:0< myRectangle=Rectangle.new(4,5) => #<Rectangle:0x587c758 @width=5, @height=4> irb(main):050:0< myRectangle="Jim's Rectangle" => "Jim's Rectangle" |
你可以在許多其它程序語言(甚至包括象Java這樣的面向對象的語言)中試驗一下,并觀察從你的IDE所產生的編譯錯誤。
變量,實例變量,類變量,甚至還有"常量"其實都只是對象引用。它們引用對象,但是它們并不是對象本身。因此,它們可以被動態地改變,甚至引用另一種不同類型的對象。
因為這一靈活性,所以必須在Ruby中進行一些約定以幫助每個人都知道某個變量正為代碼所使用。其實,你已經看到了其中之一(@符號,它意味著這是一個實例變量)。其它的變量,方法和類命名約定列于下表1中。
局部變量 | 全局變量 | 實例變量 | 類變量 | 常數 | 類名 | 方法名 |
aVar | $Var | @var | @@var | VAR | MyClassmy | Method |
name | $debug | @lastName | @@interest | PI | Rectangle | area |
表1.這個表包含了在Ruby編碼約定下的相關示例。
操作符方法
現在,假定你想實現合并Rectangle類的實例或把它們添加到另一個Rectangle實例。你當然可以定義另外一個稱為"add"的方法,這種選擇利用了Ruby真正的面向對象的特征之一。然而,你還可以重載"+"運算符來適當地把兩個Rectangle實例加起來。這個"+"方法(如4+5),對Ruby來說,只是另外一個方法而已。由于只是"另外一個方法",所以你可以給它增加一些功能來滿足Rectangle類的需要。例如,你還可以定義"+"運算符來實現一個矩形面積加上另一個矩形面積。
def + (anotherRectangle) totalArea = area() + anotherRectangle.area() Rectangle.new(@height,totalArea/@height) end |
共2頁: 1 [2] 下一頁 |
原文轉自:http://www.anti-gravitydesign.com