Ruby代碼塊Blocks的用法介紹

Ruby的代碼塊评矩,是Ruby的特色之一。通常存在于do...end中間或者花括號{}中間。代碼塊可以作為隱式的或者顯示的參數(shù)傳入函數(shù)哭尝,在某些情況下帶來了便利。本文就Ruby的代碼塊的四個簡單用法做個介紹剖煌。

1. 基礎(chǔ)用法

任何函數(shù)在調(diào)用的時候都能將代碼塊作為隱變量傳入材鹦,在方法的內(nèi)部,用yield關(guān)鍵字執(zhí)行代碼塊耕姊。舉個栗子

def hello 
  yield    #此處執(zhí)行代碼塊
end
hello {puts 'Hello, jianshu.com'} #這是跟在函數(shù)hello后面的代碼塊

運(yùn)行結(jié)果跟下面的代碼是等價的

def hello  #代碼塊綁定的函數(shù)
  puts 'Hello, jianshu.com'
end
hello

2. 檢查是否有代碼塊被傳入

在方法中用block given? 來判斷是否有代碼塊被傳入桶唐。

def hello
  unless block_given?
    puts 'We don\'t know what to say...' 
  else 
    yield 
  end
end
hello    #未傳入代碼塊
hello {puts 'Welcome to my blog.'}    #傳入代碼塊

其結(jié)果為

> We don't know what to say...
> Welcome to my blog

3. 含有參數(shù)的代碼塊的調(diào)用

def hello
  yield('Peach','jianshu.com')
end
hello {|name, address| puts name+', welcome to '+address}

運(yùn)行結(jié)果為

> Peach, welcome to jianshu.com

4. 代碼塊作為顯式參數(shù)傳入

以上的三個例子中,函數(shù)內(nèi)部的調(diào)用代碼塊用的是yield,并沒有顯示地使用代碼塊茉兰。代碼塊可以作為顯示參數(shù)傳入尤泽,作為block variable在函數(shù)中進(jìn)行調(diào)用。

def hello(name,address,&block)  
  block.call name,address
  puts "Block has #{block.arity} parameters"
end
hello('Peach','Jianshu.com') {|name, address| puts name+', welcome to '+address}

運(yùn)行結(jié)果為

> Peach, welcome to Jianshu.com
> Block has 2 parameters

在上面的代碼中规脸,將含有參數(shù)的代碼塊作為最后一個參數(shù)傳入函數(shù)坯约,用block.call 來執(zhí)行代碼塊,block.arity 返回代碼塊的參數(shù)個數(shù)莫鸭。

以上就是Ruby的代碼塊的簡單入門闹丐。話說回來,Ruby真是門神奇的語言被因。

原創(chuàng)于簡書卿拴,請勿轉(zhuǎn)載。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末氏身,一起剝皮案震驚了整個濱河市巍棱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蛋欣,老刑警劉巖航徙,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異陷虎,居然都是意外死亡到踏,警方通過查閱死者的電腦和手機(jī)杠袱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窝稿,“玉大人楣富,你說我怎么就攤上這事“槔疲” “怎么了纹蝴?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長踪少。 經(jīng)常有香客問我塘安,道長,這世上最難降的妖魔是什么援奢? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任兼犯,我火速辦了婚禮,結(jié)果婚禮上集漾,老公的妹妹穿的比我還像新娘切黔。我一直安慰自己,他們只是感情好具篇,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布纬霞。 她就那樣靜靜地躺著,像睡著了一般栽连。 火紅的嫁衣襯著肌膚如雪险领。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天秒紧,我揣著相機(jī)與錄音绢陌,去河邊找鬼。 笑死熔恢,一個胖子當(dāng)著我的面吹牛脐湾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播叙淌,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼秤掌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鹰霍?” 一聲冷哼從身側(cè)響起闻鉴,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茂洒,沒想到半個月后孟岛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年渠羞,在試婚紗的時候發(fā)現(xiàn)自己被綠了斤贰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡次询,死狀恐怖荧恍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情屯吊,我是刑警寧澤送巡,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站雌芽,受9級特大地震影響授艰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜世落,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望糟需。 院中可真熱鬧屉佳,春花似錦、人聲如沸洲押。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杈帐。三九已至体箕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挑童,已是汗流浹背累铅。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留站叼,地道東北人娃兽。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像尽楔,于是被迫代替她去往敵國和親投储。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容