最初の一回だけブロックを実行する そのに

入り口どこ?

id:znz:20060604:p1
むむ。おっしゃる通りです。ということでProcを継承したバージョンを書いてみました。

class OnlyOnceProc < Proc
  def call(*args)
    unless defined? @called
      super(*args)
      @called = true
    end
  end
end

if __FILE__ == $0
  proc = OnlyOnceProc.new {|arg| puts 'called!! ' + arg }
  proc.call('hoge') # => called!! hoge
  proc.call # ブロックは実行されない。
end