1. 標準型別
1.1 數字
ruby支援整數和浮點數。整數可以是任何長度,一定範圍內的整數在內部以二進位制形式儲存,它們是fixnum類的物件,範圍之外的整數儲存在bugnum類的物件中。ruby會自動管理它們之間的來回轉換。
在書寫整數時,可以使用乙個可選的前導符號,可選的進製指示符(0b表示二進位制,0表示八進位制,0d表示十進位制,0x表示十六進製制),後面跟一趾符合適當進製的數字,下劃線在數字串中被忽略。
帶有小數點或冪的的數字字面量被轉換成浮點物件,必須在小數點之前和之後都給出數字,比如"1.0e3"寫成"1.e3",ruby會試圖呼叫fixnum類的e3方法。
整數也支援幾種迭代器,比如times表示次數,例如:
6.times
還有upto和downto,它們在兩個整數之間分別向上和向下迭代,例如:
1.upto(10)
10.downto(1)
numeric類提供了更通用的step方法,例如:
1.step(100, 10)
1.2 字串
ruby字串是8位元位元組的序列,通常它們包含可列印字元,但這不是乙個必要條件,字串也可以包含二進位制資料,字串是string類的物件。
可以在字串字面量中放置各種轉義序列,例如"\n",表示乙個回車換行符。除此之外,可以使用"#{}"序列把任何ruby**的值放進字串中,如果**只是全域性變數、類變數或例項變數,花括號可以忽略。
另外還有3種方式去構建字串字面量。"%q"和"%q"分別開始界定單引號和雙引號的字串,例如:
%q/hello world!/
%q/hello #/
跟在q或q後面的字元是分界符,字串被一直讀取直到發現相匹配的結束符號,否則,字串會被一直讀取,直到出現下乙個相同的分界符。
最後,可以使用"here document"構建字串,例如:
string = <"here document"由原始檔中的那些行但沒有包含在"<<"字元後面指明終結字串的行組成,如果把乙個減號放在"<<"字元後面,就可以縮排編排終結符,例如:
string = <<-end_of_string
hello world!
hello john!
end_of_string
ruby有75個以上的標準方法,比如string#chmop方法可以去除首尾空格,例如:
puts "hello world!\r\n".chomp
string#split方法可以根據正規表示式分割字串,例如:
stringlist = 'hello john!'.split(/ /)
puts stringlist[1]
string#squeeze方法可以刪除重複字元,例如:
puts 'hello world!!!'.squeeze('!')
string#scan方法從字串中抽取匹配正規表示式的元素,例如:
puts 'hello world!'.scan(/e.*l/)
1.3 區間
區間的第乙個且可能最自然的用法是表達序列,在ruby中使用".."和"..."區間操作符來建立序列。兩個點的形式是建立閉合的區間,而3個點的形式是建立半閉半並的區間(不包括右端的值)。可以使用to_a方法把區間轉換成陣列,例如:
(1..10).to_a
('bar'..'bat').to_a
區間實現了許多方法可以迭代它們,並且以多種方式測試它們的內容,例如:
digits = 0..9
digits.include?(5)
digits.min
digits.max
digits.reject
digits.each
ruby可以根據自己所定義的物件來建立區間,唯一的限制是這些物件必須返回在序列中的下乙個物件作為對succ的響應,而且這些物件必須是可以使用"<=>"來比較的,"<=>"操作符比較兩個值,並根據第乙個值是否小於、等於或大於第二個值,分別返回-1,0或+1,例如:
class test
include comparable
attr :value
def initialize(value)
@value = value
enddef <=>(other)
self.value <=> other.value
enddef succ
test.new(@value.succ)
endendmyvalue = test.new(1)..test.new(9)
myvalue.to_a
myvalue.include?(test.new(2))
區間可以當作條件表示式來使用,當區間第一部分的條件為true時,它們就開啟,當區間第二部分的條件為true時,它們就關閉,例如:
while line = gets
puts line if line =~ /start/ .. line =~ /end/
end
區間還有一種用法是間隔測試,看一些值是否會落入區間表達的間隔內,使用"==="操作符即可,例如:
(1..10) === 5
1.4 正規表示式
正規表示式被用來根據模式對字串進行匹配。ruby提供了內建的支援,使得匹配和替換更方便和更簡明。正規表示式是regexp型別的物件,可以通過顯示呼叫建構函式或使用字面量形式"/pattern/"和"%r"來建立它們,例如:
regexp.new('^[a-z]+')
/^[a-z]+/
%r
有了正規表示式物件,可以使用regexp#match或匹配操作符"=~"和"!~"對字串進行匹配。匹配操作符對string和regexp物件均有定義,例如:
name = 'john'
name =~ /o/
/a/ =~ name
匹配操作符返回匹配發生的字元位置,它們會設定一些ruby變數。"$&"得到與模式匹配的那部分字串,"$`"得到匹配之前的那部分字串,而"$'"得到匹配之後的那部分字串。
每個正規表示式包含一種模式,用來對字串進行正規表示式的匹配。在特殊字元之前放置乙個反斜線便可以匹配它們的字面量。
2. 方法
2.1 定義方法
可以使用關鍵字def來定義乙個方法。方法名必須以乙個小寫字母開頭。表示查詢的方法名通常以"?"結尾,例如instance_of?。會修改接收者物件的方法,可以用"!"結尾,例如chop和chop!,第乙個方法返回乙個修改後的字串,而第二個則就地修改物件。可以被賦值的方法以乙個等號"="結尾。
方法可能還需要宣告某些引數,它們就是括號中列出的區域性變數。方法引數兩邊的括號是可選的,例如:
def method1(arg1, arg2, arg3)
enddef method2
end
ruby可以指定方法引數的預設值,例如:
def method(arg='john')
end
如果希望傳入可變個數的引數或者用乙個形參接收多個引數,在引數名前放置乙個星號"*"即可,例如:
def method(*arg)
end
當呼叫乙個方法時,可以用乙個block與之相關聯,通常可以使用yield從方法內部呼叫這個block。但是如果方法定義的最後乙個引數字首為"&",那麼所關聯的block會被轉換為乙個proc物件,然後賦值給這個引數,例如:
def method(&block)
block.call()
endmethod()
2.2 呼叫方法
可以通過指定接收者、方法的名稱、可選的引數及block,來呼叫乙個方法。對類方法或模組方法來說,接收者是類或模組的名字。如果省略了接收者,其預設是self。 每個被呼叫的方法都會返回乙個值。ruby有乙個return語句,可以從當前執行的方法中退出,如果不需要return,則返回的是方法執行中最後乙個語句執行的結果。
在方法定義中,如果在乙個正規引數前加上星號,那麼傳入這個方法呼叫的多個引數將會被裝入乙個陣列。如果要分解乙個陣列,則在陣列引數前加乙個星號"*",例如:
def method(args1, args2, args3)
puts "# # #"
endmethod(1, 2, 3)
method(1, *[2, 3])
Ruby混合型別
當乙個類擁有可以從多個父類繼承的特點,類應該顯示多重繼承。ruby沒有直接支援多繼承,但ruby模組有另乙個精彩使用。他們幾乎消除多重繼承的需要,提供了乙個工廠,稱為混入。混合型別給乙個精彩的控制方式增加功能類。在 中混合類,使用它的 能進行互動。module a def a1 enddef a2 ...
ruby 資料型別
整型分兩種,如果在31位以內 四位元組 那為fixnum例項。如果超過,即為bignum例項。整數範圍從 230 到 230 1 或 262 到 262 1。在這個範圍內的整數是類 fixnum 的物件,在這個範圍外的整數儲存在類 bignum 的物件中。您可以在整數前使用乙個可選的前導符號,乙個可...
Ruby資料型別
foreverphoenix的專欄 數字1 ruby支援整數和浮點數。整數可以使任何長度。一定範圍內的整數是fixnum類的物件。範圍之外的整數儲存在bignum類的物件中。這種處理是透明的。2 可以在乙個ascii字元前加乙個問號來獲得其對應的整數值。ctrl組合鍵可以由?c x或?cx x 0x...