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)載。