国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > 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的使用教程,想必都了解了吧,更多相關內容請繼續關注武林技術頻道。

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

圖片精選

主站蜘蛛池模板: 乡城县| 汉沽区| 沂水县| 固始县| 锡林浩特市| 禹城市| 开阳县| 绥芬河市| 五寨县| 陆良县| 长宁区| 宿松县| 固阳县| 海城市| 叙永县| 彭山县| 舟山市| 洪泽县| 维西| 绵阳市| 乌苏市| 阜平县| 鹤壁市| 万州区| 通海县| 都昌县| 商都县| 西昌市| 瑞安市| 翼城县| 大姚县| 易门县| 安陆市| 连山| 景洪市| 辉南县| 桃园市| 巴东县| 林周县| 柘城县| 沈丘县|