Ruby的代碼塊、迭代子和過程對象

來源:互聯網
上載者:User

在Ruby的一切都是一個對象。甚至一個代碼塊也是一個對象!在Ruby中,代碼對象被稱為代碼塊。你可以把代碼塊想像成小的程式單元。它們包含Ruby代碼並且能夠在執行它們時轉入到方法中。在Python,C和Java中與之類似的概念是函數指標,匿名函數,內部類和回呼函數。

Ruby代碼塊的文法是,把Ruby代碼放在大括弧之間或放在do/end命令之間。如下所示:

{
#這是一個代碼塊...
}
do
#...並且這也是一個代碼塊
end

在一個很簡單的執行個體中,{puts"hello world"}就是一個有效代碼塊。那麼,你應該如何使用這些代碼塊並且把它們作為一組代碼傳遞給一個方法呢?為此,首先要定義一個如下形式的簡單方法:

def someMethod
yield
end

命令yield把控制傳遞給代碼塊(它被傳遞給這個方法)。下面的代碼向你展示,一個代碼塊是如何被傳遞到上面這個方法的。

irb(main):001:0> someMethod {puts "hello world"}
hello world

每當調用yield時,執行傳遞到該方法的代碼塊。下面是另一個更複雜些的方法的例子,它使用了一個代碼塊來做更多的工作。

irb(main):001:0>
def fibonacci (stop)
while stop < 20
stop=yield
end
end
=> nil
irb(main):006:0>
i=0; j=1; fibonacci(j) {puts i; temp = i; i = j;j = temp + j}
0
1
1
2
3
5
8

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.