ruby簡要筆記

<!-- /* Font Definitions */ @font-face {font-family:宋體; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750139 0 0 159 0;} @font-face {font-family:"/@宋體"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:宋體; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi; mso-font-kerning:1.0pt;} p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph {mso-style-priority:34; mso-style-unhide:no; mso-style-qformat:yes; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; text-indent:21.0pt; mso-char-indent-count:2.0; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:宋體; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi; mso-font-kerning:1.0pt;} p.1, li.1, div.1 {mso-style-name:正文+1; mso-style-priority:99; mso-style-unhide:no; mso-style-next:正文; margin:0cm; margin-bottom:.0001pt; mso-pagination:none; mso-layout-grid-align:none; text-autospace:none; font-size:12.0pt; font-family:"Times New Roman","serif"; mso-fareast-font-family:宋體; mso-fareast-theme-font:minor-fareast;} p.Default, li.Default, div.Default {mso-style-name:Default; mso-style-unhide:no; mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:none; mso-layout-grid-align:none; text-autospace:none; font-size:12.0pt; font-family:"Times New Roman","serif"; mso-fareast-font-family:宋體; mso-fareast-theme-font:minor-fareast; color:black;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page WordSection1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.WordSection1 {page:WordSection1;} /* List Definitions */ @list l0 {mso-list-id:1110167826; mso-list-type:hybrid; mso-list-template-ids:179473029 -1 -1 -1 -1 -1 -1 -1 -1 -1;} @list l0:level1 {mso-level-text:""; mso-level-tab-stop:none; mso-level-number-position:left; margin-left:0cm; text-indent:0cm;} @list l0:level2 {mso-level-start-at:0; mso-level-text:""; mso-level-tab-stop:none; mso-level-number-position:left; margin-left:0cm; text-indent:0cm;} @list l0:level3 {mso-level-start-at:0; mso-level-text:""; mso-level-tab-stop:none; mso-level-number-position:left; margin-left:0cm; text-indent:0cm;} @list l0:level4 {mso-level-start-at:0; mso-level-text:""; mso-level-tab-stop:none; mso-level-number-position:left; margin-left:0cm; text-indent:0cm;} @list l0:level5 {mso-level-start-at:0; mso-level-text:""; mso-level-tab-stop:none; mso-level-number-position:left; margin-left:0cm; text-indent:0cm;} @list l0:level6 {mso-level-start-at:0; mso-level-text:""; mso-level-tab-stop:none; mso-level-number-position:left; margin-left:0cm; text-indent:0cm;} @list l0:level7 {mso-level-start-at:0; mso-level-text:""; mso-level-tab-stop:none; mso-level-number-position:left; margin-left:0cm; text-indent:0cm;} @list l0:level8 {mso-level-start-at:0; mso-level-text:""; mso-level-tab-stop:none; mso-level-number-position:left; margin-left:0cm; text-indent:0cm;} @list l0:level9 {mso-level-start-at:0; mso-level-text:""; mso-level-tab-stop:none; mso-level-number-position:left; margin-left:0cm; text-indent:0cm;} @list l1 {mso-list-id:1340887031; mso-list-type:hybrid; mso-list-template-ids:-878828074 1820917000 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l1:level1 {mso-level-tab-stop:none; mso-level-number-position:left; margin-left:18.0pt; text-indent:-18.0pt;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} -->

Ruby 語法

1.       註釋 使用 # 註釋單行,使用= begin =end 來註釋多行

2.       連行使用 /

3.         分隔符, ; () , 使用與 java 相同, 使用類 . 方法,使用模塊::常量

4.       關鍵字

模塊定義: module

類定義: class

方法定義: def,undef

檢查類型: defined?

條件語句: if,then,else

循環語句: for,in,while,until,next,break,do,redo,retry,yield

判斷語句: not,and,or

邏輯值和空值: true,false,nil

異常 處理: super,self

塊起始: begin/end

文件相關: _FILE_,_LINE_

方法返回: return

別名: alias

5 標識名和變量

局部變量、方法參數和方法名稱應該用一個小寫字母開頭或者用一個下劃線開頭; 全局變量用美元符作爲前綴 $ ;而實例變量用 @ 開頭;類變量用 @@ 開頭 ;類名、模塊名和常量應該用大寫字母開

Ruby 程序代碼現在是用 7 ACSII 碼來表示,通過語言擴展來支持 EUC, SJIS UTF-8 8 位編碼系統。 Ruby 2.0 版本將支持 16 位的 Unicode 編碼。

6 類庫: 如果當前程序要用到類庫中某個程序已經定義好的類、方法,就應該使用 require 或者 include 將類庫程序名包含在當前程序中

 

7 數據類型:    Ruby 數據類型有數字,字符串,數組,哈希表,區間,正則表達式

Ruby 的數組和其它語言不同,數組的每個元素可以是不同的類型: [ 2.4 99 “thank you” [ a, b ,c ] 78 ]

8.Ruby 賦值

x = 0 #x=0

a,b,c = x, (x+1), (x+2) #a=0 ,b=1,c=2

9 ruby 條件判斷:判斷條件是否相等用 “==” ,注意不要寫成 “=”

9 循環

break next & redo & retry

在循環體內,如果遇到: break ,跳出當層循環;

next ,忽略本次循環的剩餘部分,開始下一次的循環 ;(類似java continue

redo ,重新開始循環,還是從這一次開始;

retry ,重頭開始這個循環體

 

10 Java 中的 try…catch…finally…throw 相對應 , Ruby 中用 begin/end …rescue…ensure … raise 來處理異常, retry 可以用在 rescue 中。可以只用 rescue 或是 ensure ,兩者都使用時, rescue 必須在 ensure

 

11 Ruby 是動態語言,你可以改變 Ruby 程序的結構,功能,在 Ruby 程序運行中。方法、屬性可以被加入或去除,新的類或對象可以被建立,新的模塊可以出現。 Ruby 語言靈活,因爲 Ruby 是動態語言; Ruby 語言強大,因爲 Ruby 是動態語言; Ruby 語言初學者容易犯錯誤,也因爲 Ruby 是動態語言。

class Person

         def talk

                   puts "todsy"

         end

end

 

p1=Person.new

p1.talk

 

class Person

         def talk

           puts "today is #@date."

           end

           attr_accessor:date

end

 

p1.date="Sunday"

p1.talk

 

11 Ruby 語言,只有重寫,沒有其它語言具有的嚴格意義上的重載。 下面仔細分析 Ruby 爲何沒有重載,只有重寫. Java 中,重載( overload )和重寫( override )是用來表現多態性的兩種重要方式。 override 也有譯作 覆蓋 覆寫 ”.

原因 1 Ruby 支持缺省參數,例如可以調用sum(3),sum(3,6)

def sum( a, b=5 )

a+b

end

原因2 Ruby 還支持可變參數

def sum( *num )

numSum = 0

num.each { |i| numSum+=i }

return numSum

end

由於缺省參數和可變參數,參數個數不同而產生的重載,在 Ruby 中不再有效。 Ruby 語言中,定義方法時,不指定參數類型,因此第二種形式的重載也不存在。第三種形式的重載,實際是第二種形式的演化,所以,也就不存在了。綜上所述, Ruby 語言,沒有方法的重載。

 

12 單例方法: Ruby 裏,可以給具體的實例對象添加實例方法,這個方法只屬於這個實例對象,我們把這樣的方法稱之爲單例方法。 單例方法也叫作單件方法。定義單例方法,首先要生成一個實例對象,其次,要在方法名前加上對象名和一個點號 “.”

 

13 模塊: 定義模塊用 module...end 。模塊與類非常相似,但是:

A) 模塊不可以有實例對象;

B) 模塊不可以有子類。

 

14 mix -in

現實生活中,一個乒乓球不僅是球類物體,也是有彈性的物體。 C++ 支持多重繼承,多重繼承有時會導致繼承關係的混亂, Java 只提供了單繼承,通過接口可以得到多重繼承的優點,又沒有多重繼承的缺點。 Ruby 也是單繼承,不是通過接口,而是通過 Mix-in 模塊,來實現多重繼承的優點 .

通過 “ < 父類名 ,一個子類可以得到父類的屬性和方法;通過 “ include 模塊名 ,一個子類可以得到某個模塊的常量和方法。類不能被 include.

include 方法爲一個類的所有對象包含某個模塊; extend 方法爲一個類的某個對象包含某個模塊

 

15 require load

使用 require 方法讓你的程序文件變得簡潔有力。 require 方法包含另一個文件,另一個文件名需要是一個字符串 . 還有一個 load 方法與 require 方法相對應,也用來包含另一個文件 .

require 包含文件,只加載一次,遇到同一文件時自動忽略;不同路徑下的同名文件會多次加載。 load 包含文件,加載多次,即使是相同路徑下同一文件

 

      require load 用於包含文件; include extend 則用於包含模塊。

      require 加載文件一次, load 加載文件多次。

      require 加載文件時可以不加後綴名, load 加載文件時必須加後綴名。

      require 一般情況下用於加載庫文件,而 load 用於加載配置文件。

16 元編程

子類調用方法時,如果是已有的方法,則正常調用;如果是不存在的方法,就由 E9-1.rb 中的超類自動生成;如果你覺得方法不合你意,你能夠很輕易地修改方法體,這個工作也由 E9-1.rb 中的超類自動完成。 E9-1.rb 中的超類是元編程的一個簡單展現。你加入自己修改後的代碼,能夠使這個程序更加智能化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章