ruby塊 block

塊:ruby

  • 塊由大量的代碼組成。
  • 您須要給塊取個名稱。
  • 塊中的代碼老是包含在大括號 {} 內。
  • 塊老是從與其具備相同名稱的函數調用。這意味着若是您的塊名稱爲 test,那麼您要使用函數 test 來調用這個塊。
  • 您能夠使用 yield 語句來調用塊。
block_name{
   statement1
   statement2
   ..........
}

yield 語句

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

BEGIN 和 END 塊

每一個 Ruby 源文件能夠聲明當文件被加載時要運行的代碼塊(BEGIN 塊),以及程序完成執行後要運行的代碼塊(END 塊)。test

BEGIN{
    # BEGIN 代碼塊
    puts "BEGIN 代碼塊"
    }

END{
    #END代碼塊
    puts "END代碼塊"
    }

#main代碼塊
puts "MAIN代碼塊"

一個程序能夠包含多個 BEGIN 和 END 塊。BEGIN 塊按照它們出現的順序執行。END 塊按照它們出現的相反順序執行。當執行時,上面的程序輸出如下結果:yield

BEGIN 代碼塊
MAIN 代碼塊
END 代碼塊
相關文章
相關標籤/搜索