麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Ruby > 正文

舉例講解Ruby中迭代器Iterator的用法

2020-10-29 19:40:15
字體:
來源:轉載
供稿:網友

Iterator
定義

A Ruby iterator is simple a method that can invoke a block of code.

  •         Block 一般是跟著 method 出現的, 并且 block 中的代碼不一定會執行
  •         如果 method 中有 yield, 那么它的block 中的代碼會被執行
  •         Block 可以接收參數,和返回 value
def two_times  yield  yieldendtwo_times { puts "Hello" }# Hello# Hellodef fib_up_to(max) i1, i2 = 1. 1 while i1 <= max   yield i1   i1, i2 = i2, i1 + i2 endendfib_up_to(1000) { |f| print f, " " }# 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

    上面代碼中的 yield 之后的 i1 會作為 parameter 傳入到 block 中, 賦值給 block 的 argument f。
    Block 中可以有多個 arguments.

常見的 iterator
each

each is probable the simplest iterator - all it does is yield successive elements of its collection.

[1, 3, 5, 7, 9].each { |i| puts i }# 1 # 3# 5# 7# 9

find

A blocl may also return a value to the method. The value of the last expression evaluated in the block is passed back to the method as the value of the yield.

class Array def find  each do |value|    return value if yield(value)  end endend[1,3,4,7,9].find { |v| V*V > 30 } # => 7

collect (also known as map)

Which takes each element from the collection and passes it to the block. The results returned by the block are used to construct a new array

["H", "A", "L"].collect { |x| x.succ } # => ["I", "B", "M"]

inject

The inject method lets you accumulate a value across the members of a collection.

[1,3,5,7].inject { |sum, element| sum + element } # => 16# sum = 1, element = 3# sum = 4, element = 5# sum = 9, element = 7# sum = 16[1,3,5,6].inject { |product, element| product*element } # => 105

If inject is called with no parameter, it uses the first element of the collections as the initial value and starts the iteration with the second value.

上面代碼的另一種簡便寫法:

[1,3,5,7].inject(:+) # => 16[1,3,5,7]/inject(:*) # => 105

Iterator 和 I/O 系統的交互

Iterators 不僅僅能夠訪問 Array 和 Hash 中的數據, 和可以和 I/O 系統交互

f = File.open("testfile")f.each do |line| puts "The line is: #{line}"endf.close

produces:
The line is: This is line one
The line is: This is line two
The line is: This is line three


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日本成人一二三区 | 欧美精品一区自拍a毛片在线视频 | 中文字幕综合在线观看 | 污黄视频在线观看 | 日韩精品久久久久久久电影99爱 | www.mitao| 精品少妇v888av | 中文字幕激情 | 羞羞视频免费视频欧美 | 亚洲啪| 国产亚洲精品综合一区91555 | 精品二区在线观看 | 麻豆91精品91久久久 | 国产精品视频1区 | 草莓福利社区在线 | 精品一区二区三区中文字幕 | 国产精品视频成人 | 日本羞羞的午夜电视剧 | 北京一级毛片 | va免费视频 | 久久精品一区二区三区国产主播 | 日韩精品中文字幕一区二区三区 | 国产九色在线观看 | 成人在线视频黄色 | 91九色网| 视频一区二区中文字幕 | 成人做爰s片免费看网站 | 精品国产一区二区三区四区在线 | 日韩大片在线永久观看视频网站免费 | 亚洲射逼 | 欧洲成人一区 | 国产精品视频免费网站 | 欧美综合日韩 | 午夜久久久精品一区二区三区 | 色综合一区二区 | 欧美成人影院 | 久久亚洲春色中文字幕久久 | 性大片免费看 | 国产精品剧情一区二区在线观看 | 91成人在线网站 | 激情网站免费观看 |