ruby中的block是比較難理解的一個概念,但是如果你懂得了什么是回調(diào)函數(shù)。那么其實block的作用和回調(diào)函數(shù)是一樣的。
我們先看一個沒帶參數(shù)的例子:
def say
?? yield?
?? yield
end
我們先看單行的block。
say{puts("hello world")}
輸出的結(jié)果為:
hello world
hello world
block就象是一個沒有名稱的函數(shù),執(zhí)行到y(tǒng)ield就調(diào)用block中的代碼執(zhí)行。
如果block是多行的,那么就應該是這樣:
say do?
?? puts("hello world")
?? puts("ni hao");
end
輸出結(jié)果:
hello world
ni hao
hello world
ni hao
每一個yield就是執(zhí)行完block中所有的代碼。
接下去我們看看帶有參數(shù)的block。
def add
?? puts(yield(1,2))
?? puts(yield(5,6))
end
add{|a,b| a+b}
輸出的結(jié)果:
3
11
block中的a,b就是這個block的參數(shù),yield(1,3)就是調(diào)用這個block,并把1,3賦給a和b。
?