噛みくだいて貰ったので理解できるクロージャの話

Python Hack : 噛めば噛むほどおいしくなるクロージャの話

中島聡さんにクロージャを分り易く解説していただいたので、Ruby でやってみました。

conf=0
data=0

def _get_from_disk(conf,data)
  config = "初期設定:conf=#{ conf += 1}"
  lambda do |arg| 
    config + " 無名関数 arg=#{arg} dat=#{data += 1}"
  end
end

get = _get_from_disk(conf,data)

# ここで get に設定されたのは _get_from_disk 関数が返した無名関数

p get                #=> #<Proc:0xb7ee5b80@conf.rb:6>

# call メソッドで無名関数を呼ぶ
puts get.call("aaa") #=> 初期設定:conf=1 無名関数 arg=aaa dat=1
puts get.call("bbb") #=> 初期設定:conf=1 無名関数 arg=bbb dat=2
puts get.call("ccc") #=> 初期設定:conf=1 無名関数 arg=ccc dat=3
puts get.call("ddd") #=> 初期設定:conf=1 無名関数 arg=ddd dat=4

get = _get_from_disk(conf,data) のときにconfigの値が求められて保持される。
その後、何度 get.call を実行しても config の値設定は一度しか実行されないのがミソ。data の