ruby中的block是比較難理解的一個概念,但是如果你懂得了什么是回調函數。那么其實block的作用和回調函數是一樣的。
我們先看一個沒帶參數的例子:
def say
?? yield?
?? yield
end
我們先看單行的block。
say{puts("hello world")}
輸出的結果為:
hello world
hello world

block就象是一個沒有名稱的函數,執行到yield就調用block中的代碼執行。

如果block是多行的,那么就應該是這樣:
say do?
?? puts("hello world")
?? puts("ni hao");
end

輸出結果:
hello world
ni hao
hello world
ni hao
每一個yield就是執行完block中所有的代碼。


接下去我們看看帶有參數的block。
def add
?? puts(yield(1,2))
?? puts(yield(5,6))
end
add{|a,b| a+b}
輸出的結果:
3
11

block中的a,b就是這個block的參數,yield(1,3)就是調用這個block,并把1,3賦給a和b。


?