国产探花免费观看_亚洲丰满少妇自慰呻吟_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的使用教程,想必都了解了吧,更多相關內容請繼續關注武林技術頻道。

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

圖片精選

主站蜘蛛池模板: 虞城县| 郁南县| 梁河县| 雷波县| 荣成市| 冀州市| 阿巴嘎旗| 武胜县| 方山县| 封开县| 大厂| 德清县| 醴陵市| 张家界市| 三穗县| 淮南市| 灵石县| 揭西县| 石城县| 天津市| 灵武市| 获嘉县| 静海县| 双鸭山市| 江川县| 托克逊县| 诸暨市| 三原县| 达日县| 札达县| 荔浦县| 潮安县| 郁南县| 珲春市| 东阿县| 本溪市| 永定县| 巴彦县| 栾城县| 日喀则市| 水富县|