Ruby程序語言之變量與賦值簡析(1)

發表于:2007-06-11來源:作者:點擊數: 標簽:
變量與賦值 至此,你是否注意到前面所有的示例代碼中都缺少某種東西?難道你必須輸入常數,實例變量或類變量?絕對不是!這正是Ruby的真正 面向對象 的天性的一部分。為此,首先讓我們看一下Ruby中以前的普通變量。至此,你已經創建了很多Rectangle實例,但是你

變量與賦值

至此,你是否注意到前面所有的示例代碼中都缺少某種東西?難道你必須輸入常數,實例變量或類變量?絕對不是!這正是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

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