鍍金池/ 教程/ Ruby/ Ruby 塊
Ruby 方法
Ruby 語法
Ruby 注釋
Ruby 簡介
Ruby 數(shù)據(jù)庫訪問 - DBI 教程
Ruby 安裝 - Unix
Ruby 數(shù)據(jù)類型
Ruby 異常
Ruby 類案例
Ruby 命令行選項(xiàng)
Ruby CGI Sessions
Ruby 類和對(duì)象
Ruby 環(huán)境
Ruby 面向?qū)ο?/span>
Ruby 變量
Ruby Dir 類和方法
Ruby CGI方法
Ruby 塊
Ruby JSON
Ruby File 類和方法
Ruby 安裝 - Windows
Ruby 判斷
Ruby CGI編程
Ruby 發(fā)送郵件 – SMTP
Ruby XML, XSLT 和 XPath 教程
Ruby 迭代器
Ruby 數(shù)組
Ruby 模塊
Ruby 正則表達(dá)式
Ruby CGI Cookies
Ruby Web Services 應(yīng)用 - SOAP4R
Ruby 循環(huán)
Ruby 多線程
Ruby Socket 編程
Ruby 環(huán)境變量
Ruby 日期 & 時(shí)間
Ruby 范圍
Ruby 字符串
Ruby 哈希(Hash)
Ruby 運(yùn)算符
Ruby 文件的輸入與輸出

Ruby 塊

您已經(jīng)知道 Ruby 如何定義方法以及您如何調(diào)用方法。類似地,Ruby 有一個(gè)塊的概念。

  • 塊由大量的代碼組成。
  • 您需要給塊取個(gè)名稱。
  • 塊中的代碼總是包含在大括號(hào) {} 內(nèi)。
  • 塊總是從與其具有相同名稱的函數(shù)調(diào)用。這意味著如果您的塊名稱為 test,那么您要使用函數(shù) test 來調(diào)用這個(gè)塊。
  • 您可以使用 yield 語句來調(diào)用塊。

語法

    block_name{
       statement1
       statement2
       ..........
    }

在這里,您將學(xué)到如何使用一個(gè)簡單的 yield 語句來調(diào)用塊。您也將學(xué)到如何使用帶有參數(shù)的 yield 語句來調(diào)用塊。在實(shí)例中,您將看到這兩種類型的 yield 語句。

yield 語句

讓我們看一個(gè) yield 語句的實(shí)例:

    #!/usr/bin/ruby

    def test
       puts "You are in the method"
       yield
       puts "You are again back to the method"
       yield
    end
    test {puts "You are in the block"}

這將產(chǎn)生以下結(jié)果:

    You are in the method
    You are in the block
    You are again back to the method
    You are in the block

您也可以傳遞帶有參數(shù)的 yield 語句。下面是一個(gè)實(shí)例:

    #!/usr/bin/ruby

    def test
       yield 5
       puts "You are in the method test"
       yield 100
    end
    test {|i| puts "You are in the block #{i}"}

這將產(chǎn)生以下結(jié)果:

    You are in the block 5
    You are in the method test
    You are in the block 100

在這里,yield 語句后跟著參數(shù)。您甚至可以傳遞多個(gè)參數(shù)。在塊中,您可以在兩個(gè)豎線之間放置一個(gè)變量來接受參數(shù)。因此,在上面的代碼中,yield 5 語句向 test 塊傳遞值 5 作為參數(shù)。

現(xiàn)在,看下面的語句:

    test {|i| puts "You are in the block #{i}"}

在這里,值 5 會(huì)在變量 i 中收到?,F(xiàn)在,觀察下面的 puts 語句:

    puts "You are in the block #{i}"

這個(gè) puts 語句的輸出是:

    You are in the block 5

如果您想要傳遞多個(gè)參數(shù),那么 yield 語句如下所示:

    yield a, b

此時(shí),塊如下所示:

    test {|a, b| statement}

參數(shù)使用逗號(hào)分隔。

塊和方法

您已經(jīng)看到塊和方法之間是如何相互關(guān)聯(lián)的。您通常使用 yield 語句從與其具有相同名稱的方法調(diào)用塊。因此,代碼如下所示:

    #!/usr/bin/ruby

    def test
      yield
    end
    test{ puts "Hello world"}

本實(shí)例是實(shí)現(xiàn)塊的最簡單的方式。您使用 yield 語句調(diào)用 test 塊。

但是如果方法的最后一個(gè)參數(shù)前帶有 &,那么您可以向該方法傳遞一個(gè)塊,且這個(gè)塊可被賦給最后一個(gè)參數(shù)。如果 * 和 & 同時(shí)出現(xiàn)在參數(shù)列表中,& 應(yīng)放在后面。

    #!/usr/bin/ruby

    def test(&block)
       block.call
    end
    test { puts "Hello World!"}

這將產(chǎn)生以下結(jié)果:

    Hello World!

BEGIN 和 END 塊

每個(gè) Ruby 源文件可以聲明當(dāng)文件被加載時(shí)要運(yùn)行的代碼塊(BEGIN 塊),以及程序完成執(zhí)行后要運(yùn)行的代碼塊(END 塊)。

    #!/usr/bin/ruby

    BEGIN {
      # BEGIN block code
      puts "BEGIN code block"
    }

    END {
      # END block code
      puts "END code block"
    }
      # MAIN block code
    puts "MAIN code block"

一個(gè)程序可以包含多個(gè) BEGIN 和 END 塊。BEGIN 塊按照它們出現(xiàn)的順序執(zhí)行。END 塊按照它們出現(xiàn)的相反順序執(zhí)行。當(dāng)執(zhí)行時(shí),上面的程序產(chǎn)生產(chǎn)生以下結(jié)果:

    BEGIN code block
    MAIN code block
    END code block