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 の