a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Ruby > 正文

Ruby中迭代器Iterator的使用教程

2020-02-24 15:40:38
字體:
來源:轉載
供稿:網友

  今天小編給大家分享一篇ruby.html" target="_blank">Ruby中迭代器Iterator的使用教程,感興趣的朋友跟小編一起來了解一下吧!

  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

  yield

  end

  two_times { puts "Hello" }

  # Hello

  # Hello

  def fib_up_to(max)

  i1, i2 = 1. 1

  while i1

  yield i1

  i1, i2 = i2, i1 + i2

  end

  end

  fib_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

  end

  end

  [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}"

  end

  f.close

  produces:

  The line is: This is line one

  The line is: This is line two

  The line is: This is line three

  以上就是Ruby中迭代器Iterator的使用教程,想必都了解了吧,更多相關內容請繼續關注武林技術頻道。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 图片区 国产 欧美 另类 在线 | 欧美一及黄色片 | 综合色播 | 二区在线视频 | 日韩一本 | 综合久久99| 免费国产视频在线观看 | 中文日韩 | 日韩一区二区三区在线观看 | 狠狠操综合网 | 色综合久久久 | 粉嫩一区二区 | sese久久| 一区二区国产精品 | 国产精彩视频 | 欧美成人在线网站 | 久草视 | 国产精品一区二区三区99 | 91在线免费看 | 欧美黄视频 | 国产精品美乳一区二区免费 | 青青草99| 中文字幕国产区 | 国产一区视频在线 | 国产拍拍视频 | 欧美日韩国产精品 | 国产91亚洲精品 | 欧美成人免费 | 亚洲一区二区三区中文字幕 | 日本精品久久久久久久 | 无套内谢孕妇毛片免费看红桃影视 | 一本一本久久a久久精品牛牛影视 | 一二三区字幕免费观看av | 黄色片在线免费观看 | 欧美精品1区2区 | 欧美日韩精品久久久 | 欧美日韩激情在线 | 久久99精品国产自在现线 | 黄页网站在线免费观看 | 久久人人爽人人爽 | 国产视频一二区 |