范圍
Ruby中的Range就是給定起點和終點,自動為您生成連續(xù)值的方式细溅。
(1..5) #==> 1, 2, 3, 4, 5
(1...5) #==> 1, 2, 3, 4
('a'..'d') #==> 'a', 'b', 'c', 'd'
可以使用to.a方法將這個范圍轉為數(shù)組
range2 = ('bar'..'bat').to_a #["bar", "bas", "bat"]
有一些實用的方法:
.include?
.min
.reject {|i| i < 5 }
if ((1..10) === 5)
puts "5 在 (1..10)"
end
還有each方法
迭代器
在Ruby中有兩個主要的迭代器:each和collect
each返回集合的每個元素褥傍,通常與塊結合使用
ary = [1,2,3,4,5]
ary.each do |i|
puts i
end
collect會返回整個集合,并可以通過塊來對每一個元素進行操作
a = [1,2,3,4,5]
b = a.collect{|x| 10*x}
puts b
如果你并不想做任何操作喇聊,只是單純的想復制集合的話就不要用這個了恍风。有個方法叫clone。
異常處理
begin #開始
raise.. #拋出異常
rescue [ExceptionType = StandardException] #捕獲指定類型的異常 缺省值是StandardException
$! #表示異常信息
$@ #表示異常出現(xiàn)的代碼位置
else #其余異常
..
ensure #不管有沒有異常承疲,進入該代碼塊
end #結束
從 begin 到 rescue 中的一切是受保護的邻耕。如果代碼塊執(zhí)行期間發(fā)生了異常,控制會傳到 rescue 和 end 之間的塊燕鸽。
對于 begin 塊中的每個 rescue 子句兄世,Ruby 把拋出的異常與每個參數(shù)進行輪流比較。如果 rescue 子句中命名的異常與當前拋出的異常類型相同啊研,或者是該異常的父類御滩,則匹配成功。
如果異常不匹配所有指定的錯誤類型党远,我們可以在所有的 rescue 子句后使用一個 else 子句削解。
begin
# 這段代碼拋出的異常將被下面的 rescue 子句捕獲
rescue
# 這個塊將捕獲所有類型的異常
retry # 這將把控制移到 begin 的開頭
end
retry要謹慎使用,如果你不能保證rescue中的語句可以成功的挽救錯誤沟娱,使用retry會讓這段無限執(zhí)行氛驮。
raise
raise "Error Message"
raise ExceptionType, "Error Message"
raise ExceptionType, "Error Message" condition
raise用于拋出異常
第一種形式簡單地重新拋出當前異常(如果沒有當前異常則拋出一個 RuntimeError)。這用在傳入異常之前需要解釋異常的異常處理程序中济似。
第二種形式創(chuàng)建一個新的 RuntimeError 異常矫废,設置它的消息為給定的字符串盏缤。該異常之后拋出到調用堆棧。
第三種形式使用第一個參數(shù)創(chuàng)建一個異常蓖扑,然后設置相關的消息為第二個參數(shù)唉铜。
第四種形式與第三種形式類似,您可以添加任何額外的條件語句(比如 unless)來拋出異常律杠。
begin
#.. 過程
#.. 拋出異常
rescue
#.. 處理錯誤
ensure
#.. 最后確保執(zhí)行
#.. 這總是會執(zhí)行
end
ensure不管有沒有異常都會執(zhí)行
begin
#.. 過程
#.. 拋出異常
rescue
#.. 處理錯誤
else
#.. 如果沒有異常則執(zhí)行
ensure
#.. 最后確保執(zhí)行
#.. 這總是會執(zhí)行
end
else在沒有異常的情況下執(zhí)行
def promptAndGet(prompt)
print prompt
res = readline.chomp
throw :quitRequested if res == "!"
return res
end
catch :quitRequested do
name = promptAndGet("Name: ")
age = promptAndGet("Age: ")
sex = promptAndGet("Sex: ")
# ..
# 處理信息
end
#....
在catch執(zhí)行的過程中潭流,如果遇到同名的throw則跳出catch,否則正常執(zhí)行完catch柜去。如果不在catch里throw則會報錯灰嫉。
我們可以創(chuàng)建自己的異常類,它必須是Exception 或其子代的子類诡蜓。