From: Inaba Hiroto Date: 1998-06-30T01:22:47+09:00 Subject: [ruby-dev:3095] Re: experimental release 1.1b9_28 From: ttate@jaist.ac.jp Subject: [ruby-dev:3093] Re: experimental release 1.1b9_28 Date: Mon, 29 Jun 1998 22:17:17 +0900 >>tadf@kt.rim.or.jpさん(06月29日21時): >>tadf>>def foo >>tadf>> $a = proc{yield} >>tadf>>end >>tadf>>foo >>tadf>>$a.call >>tadf>> >>tadf>>なんてムチャなことしたらコアダンプしました。 : > すみません。なんか全然違うことかいてました。(^^; > yieldの存在期間が過ぎてしまっている > からコアダンプしてしまうだけですね。 そうゆうことなのかも知れませんが、ブロックを引数として受けると % ruby -e ' def foo(&blk) $a = proc{blk.call} end foo{10} p $a.call(10) ' 10 と正常に動作するので、yieldでも同じ振舞いをしてくれてもいいですね。 自分が[ruby-dev:3067]で出した問題も % ruby -e ' class Array def foo(&blk) collect{|e|[e,blk.call(e)]}.sort{|a,b| a[1]<=>b[1]} end end p [[1,1],[2,2],[3,3]].foo{|x| x} ' [[[1, 1], [1, 1]], [[2, 2], [2, 2]], [[3, 3], [3, 3]]] ブロックを引数で受けると正しく動くみたいです。 -- 稲葉 浩人 (inaba@st.rim.or.jp)