From: NAGAI Hidetoshi Date: 1998-06-10T20:36:28+09:00 Subject: [ruby-list:8283] proc scope 永井@知能.九工大です. ちょっとした質問です. 例えば次のようなコードがあったとします. --------------------------------------------------------- def foo (a) p a end x = [] (0..9).each{|i| x[i] = proc{foo i} } --------------------------------------------------------- この場合,各 proc{foo i} はイテレータブロックのスコープを 引き継ぎますから,foo の引数は最後の i の値となり, x[1].call であろうと x[4].call であろうと 9 を出力してしまいます. スコープを切り離すために,proc 定義のためだけのメソッドを用意し --------------------------------------------------------- def def_proc (a) proc{foo a} end ... (0..9).each{|i| x[i] = def_proc(i) } --------------------------------------------------------- などとすれば,この問題をさけることができるのですが, このためだけにメソッドを用意しなければならないのも ちょっと嫌かなという感じがします. そこで質問です. このような場合のうまい手はないでしょうか? -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp