新聞中心
您已經(jīng)知道 Ruby 如何定義方法以及您如何調(diào)用方法。類似地,Ruby 有一個塊的概念。

從網(wǎng)站建設(shè)到定制行業(yè)解決方案,為提供成都網(wǎng)站設(shè)計、網(wǎng)站制作服務(wù)體系,各種行業(yè)企業(yè)客戶提供網(wǎng)站建設(shè)解決方案,助力業(yè)務(wù)快速發(fā)展。創(chuàng)新互聯(lián)公司將不斷加快創(chuàng)新步伐,提供優(yōu)質(zhì)的建站服務(wù)。
- 塊由大量的代碼組成。
- 您需要給塊取個名稱。
- 塊中的代碼總是包含在大括號 {} 內(nèi)。
- 塊總是從與其具有相同名稱的函數(shù)調(diào)用。這意味著如果您的塊名稱為 test,那么您要使用函數(shù) test 來調(diào)用這個塊。
- 您可以使用 yield 語句來調(diào)用塊。
語法
block_name{
statement1
statement2
..........
}
在這里,您將學到如何使用一個簡單的 yield 語句來調(diào)用塊。您也將學到如何使用帶有參數(shù)的 yield 語句來調(diào)用塊。在實例中,您將看到這兩種類型的 yield 語句。
yield 語句
讓我們看一個 yield 語句的實例:
#!/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 語句。下面是一個實例:
#!/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 語句后跟著參數(shù)。您甚至可以傳遞多個參數(shù)。在塊中,您可以在兩個豎線之間放置一個變量來接受參數(shù)。因此,在上面的代碼中,yield 5 語句向 test 塊傳遞值 5 作為參數(shù)。
現(xiàn)在,看下面的語句:
test {|i| puts "你在塊 #{i} 內(nèi)"}在這里,值 5 會在變量 i 中收到?,F(xiàn)在,觀察下面的 puts 語句:
puts "你在塊 #{i} 內(nèi)"這個 puts 語句的輸出是:
你在塊 5 內(nèi)
如果您想要傳遞多個參數(shù),那么 yield 語句如下所示:
yield a, b
此時,塊如下所示:
test {|a, b| statement}參數(shù)使用逗號分隔。
塊和方法
您已經(jīng)看到塊和方法之間是如何相互關(guān)聯(lián)的。您通常使用 yield 語句從與其具有相同名稱的方法調(diào)用塊。因此,代碼如下所示:
#!/usr/bin/ruby
def test
yield
end
test{ puts "Hello world"}
本實例是實現(xiàn)塊的最簡單的方式。您使用 yield 語句調(diào)用 test 塊。
但是如果方法的最后一個參數(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!
BEGIN 和 END 塊
每個 Ruby 源文件可以聲明當文件被加載時要運行的代碼塊(BEGIN 塊),以及程序完成執(zhí)行后要運行的代碼塊(END 塊)。
#!/usr/bin/ruby
BEGIN {
# BEGIN 代碼塊
puts "BEGIN 代碼塊"
}
END {
# END 代碼塊
puts "END 代碼塊"
}
# MAIN 代碼塊
puts "MAIN 代碼塊"一個程序可以包含多個 BEGIN 和 END 塊。BEGIN 塊按照它們出現(xiàn)的順序執(zhí)行。END 塊按照它們出現(xiàn)的相反順序執(zhí)行。當執(zhí)行時,上面的程序產(chǎn)生產(chǎn)生以下結(jié)果:
BEGIN 代碼塊 MAIN 代碼塊 END 代碼塊
當前題目:創(chuàng)新互聯(lián)Ruby教程:Ruby塊
網(wǎng)頁鏈接:http://m.fisionsoft.com.cn/article/cdjoijo.html


咨詢
建站咨詢
