W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
您已經(jīng)知道 Ruby 如何定義方法以及您如何調(diào)用方法。類(lèi)似地,Ruby 有一個(gè)塊的概念。
block_name{ statement1 statement2 .......... }
在這里,您將學(xué)到如何使用一個(gè)簡(jiǎn)單的 yield 語(yǔ)句來(lái)調(diào)用塊。您也將學(xué)到如何使用帶有參數(shù)的 yield 語(yǔ)句來(lái)調(diào)用塊。在實(shí)例中,您將看到這兩種類(lèi)型的 yield 語(yǔ)句。
讓我們看一個(gè) yield 語(yǔ)句的實(shí)例:
#!/usr/bin/ruby # -*- coding: UTF-8 -*- def test puts "在 test 方法內(nèi)" yield puts "你又回到了 test 方法內(nèi)" yield end test {puts "你在塊內(nèi)"}嘗試一下 ?
這將產(chǎn)生以下結(jié)果:
在 test 方法內(nèi) 你在塊內(nèi) 你又回到了 test 方法內(nèi) 你在塊內(nèi)
您也可以傳遞帶有參數(shù)的 yield 語(yǔ)句。下面是一個(gè)實(shí)例:
#!/usr/bin/ruby # -*- coding: UTF-8 -*- def test yield 5 puts "在 test 方法內(nèi)" yield 100 end test {|i| puts "你在塊 #{i} 內(nèi)"}嘗試一下 ?
這將產(chǎn)生以下結(jié)果:
你在塊 5 內(nèi) 在 test 方法內(nèi) 你在塊 100 內(nèi)
在這里,yield 語(yǔ)句后跟著參數(shù)。您甚至可以傳遞多個(gè)參數(shù)。在塊中,您可以在兩個(gè)豎線之間放置一個(gè)變量來(lái)接受參數(shù)。因此,在上面的代碼中,yield 5 語(yǔ)句向 test 塊傳遞值 5 作為參數(shù)。
現(xiàn)在,看下面的語(yǔ)句:
test {|i| puts "你在塊 #{i} 內(nèi)"}
在這里,值 5 會(huì)在變量 i 中收到?,F(xiàn)在,觀察下面的 puts 語(yǔ)句:
puts "你在塊 #{i} 內(nèi)"
這個(gè) puts 語(yǔ)句的輸出是:
你在塊 5 內(nèi)
如果您想要傳遞多個(gè)參數(shù),那么 yield 語(yǔ)句如下所示:
yield a, b
此時(shí),塊如下所示:
test {|a, b| statement}
參數(shù)使用逗號(hào)分隔。
您已經(jīng)看到塊和方法之間是如何相互關(guān)聯(lián)的。您通常使用 yield 語(yǔ)句從與其具有相同名稱的方法調(diào)用塊。因此,代碼如下所示:
#!/usr/bin/ruby def test yield end test{ puts "Hello world"}
本實(shí)例是實(shí)現(xiàn)塊的最簡(jiǎn)單的方式。您使用 yield 語(yǔ)句調(diào)用 test 塊。
但是如果方法的最后一個(gè)參數(shù)前帶有 &,那么您可以向該方法傳遞一個(gè)塊,且這個(gè)塊可被賦給最后一個(gè)參數(shù)。如果 * 和 & 同時(shí)出現(xiàn)在參數(shù)列表中,& 應(yīng)放在后面。
#!/usr/bin/ruby def test(&block) block.call end test { puts "Hello World!"}嘗試一下 ?
這將產(chǎn)生以下結(jié)果:
Hello World!
每個(gè) Ruby 源文件可以聲明當(dāng)文件被加載時(shí)要運(yùn)行的代碼塊(BEGIN 塊),以及程序完成執(zhí)行后要運(yùn)行的代碼塊(END 塊)。
#!/usr/bin/ruby BEGIN { # BEGIN 代碼塊 puts "BEGIN 代碼塊" } END { # END 代碼塊 puts "END 代碼塊" } # MAIN 代碼塊 puts "MAIN 代碼塊"
一個(gè)程序可以包含多個(gè) BEGIN 和 END 塊。BEGIN 塊按照它們出現(xiàn)的順序執(zhí)行。END 塊按照它們出現(xiàn)的相反順序執(zhí)行。當(dāng)執(zhí)行時(shí),上面的程序產(chǎn)生產(chǎn)生以下結(jié)果:
BEGIN 代碼塊 MAIN 代碼塊 END 代碼塊
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: