塊:ruby
block_name{ statement1 statement2 .......... }
def test_yield puts "在 test 方法內" yield puts "你又回到了 test 方法內" yield end test_yield{puts "你在塊內"} #在 test 方法內 #你在塊內 #你又回到了 test 方法內 #你在塊內
至關於yield被大括號內的code代替了函數
帶有參數的 yield 語句spa
def test_yield_2 yield 10 puts "你又回到了 test 方法內" yield 100 end test_yield_2{|i| puts "你在塊#{i}內"} #你在塊10內 #你又回到了 test 方法內 #你在塊100內
若是您想要傳遞多個參數,那麼 yield 語句以下所示:code
yield a, b test {|a, b| statement}
def test_3 yield end test_3{ puts "Hello world"} #Hello world
可是若是方法的最後一個參數前帶有 &,那麼您能夠向該方法傳遞一個塊,且這個塊可被賦給最後一個參數。若是 * 和 & 同時出如今參數列表中,& 應放在後面。class
def test_4(&block) block.call end test_4{ puts "Hello world"} #Hello world
每一個 Ruby 源文件能夠聲明當文件被加載時要運行的代碼塊(BEGIN 塊),以及程序完成執行後要運行的代碼塊(END 塊)。test
BEGIN{ # BEGIN 代碼塊 puts "BEGIN 代碼塊" } END{ #END代碼塊 puts "END代碼塊" } #main代碼塊 puts "MAIN代碼塊"
一個程序能夠包含多個 BEGIN 和 END 塊。BEGIN 塊按照它們出現的順序執行。END 塊按照它們出現的相反順序執行。當執行時,上面的程序輸出如下結果:yield
BEGIN 代碼塊 MAIN 代碼塊 END 代碼塊