Ruby數據類型

轉自[foreverphoenix的專欄]

數字

1、Ruby支持整數和浮點數。整數可以使任何長度。一定範圍內的整數是Fixnum類的對象。範圍之外的整數存儲在Bignum類的對象中。這種處理是透明的。


2、可以在一個ASCII字符前加一個問號來獲得其對應的整數值。Ctrl組合鍵可以由?\C-x或?\cx(x&0x9f)來產生。Meta字符(x|0x80)可以由?\M-x來產生。


3、一個帶有小數點"或/和"指數的數字字面量被認爲是Float對象。Float對象和本機上的double類型大小一樣。

4、Float精度有限,若需要更好精度的小數,可以使用標準庫中BigDecimal,但效率會受影響。

字符串

1、字符串字面量中可以放置各種轉義序列。字符串分界符的類型決定了要被替換的程度。在單引號字符串中,只識別反斜線和單引號的轉義。雙引號字符串支持更多的轉義字符,還可以使用#{expr}把任何Ruby表達式的值放進字符串中,其中如果expr是全局變量、類變量或實例變量的話,花括號可以忽略。

2、另外有三種構建字符串字面量的形式:%q(相當於單引號),%Q(相當於雙引號),here document。跟在q或Q後面的字符是分界符。分界符可以是任何一個非字母數字的單字節字符。字符串被一直讀取直到出現下一個相同的(對({[<來說是對應的閉合符號) 分界符。Here document由源文件中的那些行但沒有包含在<<字符後面指明終結字符串的行組成。一般情況下終結符必須在第一列出現。如果把一個減號-放在<<字符後面,就可以縮進編排終結符。分隔符可以跨越多行,行結束符以及後續行開始處的空格都被包含到字符串中。

3、其他用於字符串的分隔符還有%w(%W)生成字符串數組,%x執行shell命令,%r生成正則表達式。

4、Ruby字符串是8位字節序列。如果處理Unicode編碼,需要加入以下代碼:(jcode庫覆蓋了String類中大多數方法用來處理多字節文本) $KCODE='u' require 'jcode'

5、正則表達式的三種表達方式:1)/regular_expression/ 2)Regexp.new(“regular_expression”) 3)%r{regular_expression}

區間

1、區間作爲序列,”..”的形式是創建閉合的區間(包括右端的值),”…”的形式是創建半閉半開區間(不包括右端德值)。

2、可以用自定義的對象來創建區間,條件是這些對象必須實現succ方法和<=>。

3、區間作爲條件使用,當區間的第一部分的條件爲true時打開,當區間的第二部分的條件爲true關閉。兩點的range在第一次從關變爲開時,會立即求解結束條件,並相應地變遷狀態。這意味着如果expr1和expr2在一個調用中都爲真,那麼兩點形式的調用將結束於關狀態。不過該調用仍返回真。三點形式的range不會在進入開狀態後立即求解結束條件。

4、區間作爲間隔,測試某些值是否會落入區間表達的間隔內。使用===操作符比較。

數組

1、數組類的字面量是在方括號間由逗號分隔的一連串對象引用組成的。對於全部是字符串對象的數組,可以用簡寫形式%w和%W來構成。%w形式將空格隔開的token提取爲連續的數組元素,在單個字符串內不執行替換。%W形式對每個token執行和雙引號字符串一樣的替換規則,空格可以用反斜線轉義。

2、通過[index]訪問數組元素,第一個元素索引爲0。索引可以爲負值,-1表示最後一個元素。

散列表

1、散列表的初始化有兩種方式:{}中用key=>value的形式,[]中連續放置key,value,中間用逗號隔開。

2、散列表中的鍵如果使用equ?比較相等,那麼這兩個鍵必定具有相同的散列碼。如果把自定義類的對象實例作爲hash鍵,那麼需要確保1)一旦對象被創建,它的散列碼就不再改變;2)每當鍵的散列碼發生變化時調用Hash#rehash方法重新對散列表進行索引。

符號

1、Ruby中Symbol 表示“名字”,比如字符串的名字,標識符的名字。創建一個Symbol對象的方法是在名字或者字符串前面加上冒號。每個String對象都是不同的,即便他們包含了相同的字符串內容;而對於Symbol對象,一個名字(字符串內容)唯一確定一個Symbol對象。名字相同,則Symbol相同;名字不同,則Symbol不同。Symbol對象一旦定義將一直存在,直到程序執行退出。所有Symbol對象存放在Ruby內部的符號表中,可以通過類方法Symbol.all_symbols得到當前Ruby程序中定義的所有Symbol對象,該方法返回一個Symbol對象數組。

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