Ruby學習筆記4(范圍音诈,迭代器幻碱,異常處理)

范圍

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 或其子代的子類诡蜓。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末熬甫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蔓罚,更是在濱河造成了極大的恐慌,老刑警劉巖瞻颂,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件豺谈,死亡現(xiàn)場離奇詭異,居然都是意外死亡贡这,警方通過查閱死者的電腦和手機茬末,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盖矫,“玉大人丽惭,你說我怎么就攤上這事”菜” “怎么了责掏?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵,是天一觀的道長湃望。 經(jīng)常有香客問我换衬,道長,這世上最難降的妖魔是什么证芭? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任瞳浦,我火速辦了婚禮,結果婚禮上废士,老公的妹妹穿的比我還像新娘叫潦。我一直安慰自己,他們只是感情好官硝,可當我...
    茶點故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布矗蕊。 她就那樣靜靜地躺著四敞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拔妥。 梳的紋絲不亂的頭發(fā)上忿危,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天,我揣著相機與錄音没龙,去河邊找鬼铺厨。 笑死,一個胖子當著我的面吹牛硬纤,可吹牛的內容都是我干的解滓。 我是一名探鬼主播,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼筝家,長吁一口氣:“原來是場噩夢啊……” “哼洼裤!你這毒婦竟也來了?” 一聲冷哼從身側響起溪王,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤腮鞍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后莹菱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體移国,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年道伟,在試婚紗的時候發(fā)現(xiàn)自己被綠了迹缀。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,973評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡蜜徽,死狀恐怖祝懂,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情拘鞋,我是刑警寧澤砚蓬,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站掐禁,受9級特大地震影響怜械,放射性物質發(fā)生泄漏。R本人自食惡果不足惜傅事,卻給世界環(huán)境...
    茶點故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一缕允、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蹭越,春花似錦障本、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽案训。三九已至,卻和暖如春粪糙,著一層夾襖步出監(jiān)牢的瞬間强霎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工蓉冈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留城舞,地道東北人。 一個月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓寞酿,卻偏偏與公主長得像家夺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子伐弹,可洞房花燭夜當晚...
    茶點故事閱讀 45,982評論 2 361

推薦閱讀更多精彩內容

  • 一拉馋、心得體會1、今天完成了什么惨好? 今天看了20頁的鎬頭書(139-160) 看了10個controller 2煌茴、今...
    柳輝閱讀 343評論 0 0
  • 一、 讓自己熟悉Ruby 1昧狮、理解 Ruby 中的 True 在 Ruby 中景馁,除了 false 和 nil, 其...
    Sgemini閱讀 686評論 0 1
  • 通俗編程——白話JAVA異常機制 - 代碼之道逗鸣,編程之法 - 博客頻道 - CSDN.NEThttp://blog...
    葡萄喃喃囈語閱讀 3,181評論 0 25
  • 概念介紹 異常是發(fā)生在程序執(zhí)行過程中阻礙程序正常執(zhí)行的錯誤事件,當一個程序出現(xiàn)錯誤時绰精,可能的情況有如下3種: 語法...
    niaoge2016閱讀 5,187評論 2 20
  • Java異常類型 所有異常類型都是Throwable的子類撒璧,Throwable把異常分成兩個不同分支的子類Erro...
    予別她閱讀 934評論 0 2