lambdaを配列にとっておいてevent dispatch
前にObject#method(:関数名).callで高階関数を使ったが
Proc.newかprocかlambdaでblockを受けて無名関数を作って配列に入れておくと、簡単なEventDispatcherとして使える
class Dispatcher attr_accessor :onNext, :now def initialize @now = 0 @onNext = Array.new end def next @now+=1 @onNext.each{|m| m.call(now) if m.class == Proc } end end d = Dispatcher.new d.onNext << lambda{ puts '呼ばれた' } d.onNext << lambda{|current| puts "今#{current}つ目です" } while d.now < 10 do d.next end
実行結果
呼ばれた 今1つ目です 呼ばれた 今2つ目です 呼ばれた 今3つ目です 呼ばれた 今4つ目です 呼ばれた 今5つ目です 呼ばれた 今6つ目です 呼ばれた 今7つ目です 呼ばれた 今8つ目です 呼ばれた 今9つ目です 呼ばれた 今10つ目です