Tbpgr Blog

Recruiting Operations tbpgr(てぃーびー) のブログ

Ruby | ファイバ | 世界のナベアツアホファイバ

概要

ファイバ

詳細

ファイバはノンプリエンプティブな軽量スレッドを提供します。
ファイバは親子関係を持ちます。
Fiber#resume を呼んだファイバーが親になり呼ばれたファイバーが子になります。

サンプルコード

世界のナベアツが3の付く数字と3の倍数でアホになる
数字をファイバで処理します。

# encoding: Windows-31J
require "pp"

nabeatsu = Fiber.new do
  cnt = 1
  loop do
    Fiber.yield(cnt) if (aho?(cnt))
    cnt += 1
  end
end

def aho?(cnt)
  cnt % 3 == 0 || cnt.to_s.include?("3")
end

1.upto(40) {|cnt|puts "ナベアツが#{cnt}回目にアホになるのは#{nabeatsu.resume}"}

出力

ナベアツが1回目にアホになるのは3
ナベアツが2回目にアホになるのは6
ナベアツが3回目にアホになるのは9
ナベアツが4回目にアホになるのは12
ナベアツが5回目にアホになるのは13
ナベアツが6回目にアホになるのは15
ナベアツが7回目にアホになるのは18
ナベアツが8回目にアホになるのは21
ナベアツが9回目にアホになるのは23
ナベアツが10回目にアホになるのは24
ナベアツが11回目にアホになるのは27
ナベアツが12回目にアホになるのは30
ナベアツが13回目にアホになるのは31
ナベアツが14回目にアホになるのは32
ナベアツが15回目にアホになるのは33
ナベアツが16回目にアホになるのは34
ナベアツが17回目にアホになるのは35
ナベアツが18回目にアホになるのは36
ナベアツが19回目にアホになるのは37
ナベアツが20回目にアホになるのは38
ナベアツが21回目にアホになるのは39
ナベアツが22回目にアホになるのは42
ナベアツが23回目にアホになるのは43
ナベアツが24回目にアホになるのは45
ナベアツが25回目にアホになるのは48
ナベアツが26回目にアホになるのは51
ナベアツが27回目にアホになるのは53
ナベアツが28回目にアホになるのは54
ナベアツが29回目にアホになるのは57
ナベアツが30回目にアホになるのは60
ナベアツが31回目にアホになるのは63
ナベアツが32回目にアホになるのは66
ナベアツが33回目にアホになるのは69
ナベアツが34回目にアホになるのは72
ナベアツが35回目にアホになるのは73
ナベアツが36回目にアホになるのは75
ナベアツが37回目にアホになるのは78
ナベアツが38回目にアホになるのは81
ナベアツが39回目にアホになるのは83
ナベアツが40回目にアホになるのは84