サンプルコード。
class Cn
def initialize(core)
@core = core
@actions = {}
end
# 遅延実行用にブロックを渡す
def add(name, &block)
@actions[name] = block
return self
end
def doit()
@actions.each{|name,block|
# ここでブロックを実行する
puts "#{@core} - #{name}: #{block.call(@core)}"
}
end
# インターフェイスをシンプルにするためのクラスメソッド
def self.doit(core, &block)
cn = Cn.new(core)
cn.instance_eval(&block)
cn.doit
end
end
# ブロック内が遅延実行される
cn1 = Cn.new('hoge1')
cn1.add('foo') { "#{Time.now}" }
cn1.add('bar') { |arg| "#{arg}" }
puts Time.now
sleep 3
cn1.doit
# インターフェイスをシンプルにするブロック
Cn.doit('hoge2'){
add('foo') { "#{Time.now}" }
add('bar') { |arg| "#{arg}" }
puts Time.now
sleep 3
}
実行結果。
C:\>ruby r2.rb
2011-05-05 08:55:57 +0900
hoge1 - foo: 2011-05-05 08:56:00 +0900
hoge1 - bar: hoge1
2011-05-05 08:56:00 +0900
hoge2 - foo: 2011-05-05 08:56:03 +0900
hoge2 - bar: hoge2
ちなみに、環境。
C:\>uname -mrsv
WindowsNT 1 5 x86
C:\>ruby -v
ruby 1.9.2p136 (2010-12-25) [i386-mingw32]
tags: ruby
Posted by NI-Lab. (@nilab)