Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | RubyでFutureパターンを実装する(シンプル編)

概要

RubyでFutureパターンを実装する(シンプル編)

内容

Ruby で Future パターンを実装する

上記の記事では、パターンの理解をするためにあえてデザパタ本にならって
写経しましたが、実際には Ruby だともっと簡単に実装できます。

サンプルコード

# encoding: utf-8
require 'pp'
require 'thread'

class Ret
  def initialize(id, value)
    @id, @value = id, value
  end
end

puts Time.now

results = []
values = %w[hoge hige hage]
3.times do |cnt|
  results << Thread.fork(cnt, values[cnt]) do |i, value|
    sleep i + 1
    Ret.new(i, value)
  end
end

puts Time.now
sleep 2
puts "wait start."
results.each {|r|
  pp r.value
}
puts Time.now

出力

  2013-06-23 01:41:00 +0900
  2013-06-23 01:41:00 +0900
  wait start.
  #<Ret:0x296e848 @id=0, @value="hoge">
  #<Ret:0x296da50 @id=1, @value="hige">
  #<Ret:0x296cce8 @id=2, @value="hage">
  2013-06-23 01:41:03 +0900