• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    關于ruby迭代器問題

    發布: 2007-7-04 20:03 | 作者: admin | 來源:  網友評論 | 查看: 52次 | 進入軟件測試論壇討論

    領測軟件測試網 3.1 什么是迭代器?

    有些方法允許在調用它的過程中添加塊或者過程對象, 這種特殊的方法就是迭代器。

    迭代器是為了抽象化控制結構(特別是循環)而設的一種方法.

    還是舉個實際的例子吧. 若您想分別為集合中的每個元素來進行相同的處理的話, 就應該使用迭代器. 例如

    data = [1, 2, 3] data.each do |i| print i, "\n" end

    它會輸出如下內容。

    $ ruby test.rb 1 2 3

    也就是說,分別為data中的每個元素來執行夾在do和end之間的塊的內容。

    用C語言來改寫的話,就是

    int data[3] = {1, 2, 3}; int i; for (i = 0; i < 3; i++) { printf("%d\n", data[i]); }

    用for來編寫代碼時, 可能會因為誤判循環邊界而導致bug(雖然在本例中不會出現這種低級錯誤), 但使用迭代器就不必擔心這些問題了:-)

    另外, 除了do...end之外, 您還可以使用{...}。

    data = [1, 2, 3] data.each { |i| print i, "\n" }

    這段代碼與前面的完全等效。但這并不標明do...end與{...}完全等效。例如

    foobar a, b do .. end # 此時foobar被看做是迭代器 foobar a, b { .. } # 而此時 b被看做是迭代器

    這說明{ }的結合力大于do塊。

    3.2 怎么將塊傳遞給迭代器?

    如果想將塊傳遞給迭代器, 只需要將塊放在方法后面即可. 另外, 還可以在表示過程對象的變量/常數前添加&, 并將其作為參數傳遞給方法即可。

    3.3 如何在主調方法中使用塊?

    有3種方式可以讓您在方法中使用塊. 它們分別是yield控制結構、塊參數和Proc.new。(在由C語言寫成的擴展庫中,需要使用rb_yield)

    使用yield時, yield后面的參數會被傳遞給塊, 然后執行塊的內容。

    塊參數是指,插在方法定義中的參數列表末尾的 形如&method的參數. 可以在方法中,這樣method.call(args...)來進行調用。

    使用Proc.new時, 它會接管傳遞給方法的塊, 并以塊的內容為范本生成一個過程對象。proc或lamda也是一樣。

    def a (&b) yield b.call Proc.new.call proc.call lambda.call end a{print "test\n"} 3.4 為什么Proc.new沒有生成過程對象呢?

    若沒有給出塊的話, Proc.new是不會生成過程對象的, 而且還會引發錯誤。在方法定義中插入Proc.new時, 一般都假定在方法調用時會傳過來一個塊。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>