yarv-dev:187
From: MAEDA Atusi <maeda-yarv atusi.org>
Date: Wed, 15 Sep 2004 22:02:37 +0900
Subject: [yarv-dev:187] Re: return from orphan Proc object
SASADA Koichi <ko1 atdot.net> writes: > def m > pr = get_proc{ > return 3 > } > pr.call # ここで,ブロック中の return が効く > end > > > def get_proc &pr > pr > end > > m > > > こんなコードが通るんですが,これを通らない仕様にするのは > 無理ですか? つまり,Orphan になった Proc オブジェクトから > の break, retry, return は禁止,というルール.それなりにシ > ンプルだと思うのですが. retryとbreakの飛び先は、上のget_procから返っちゃった時に無効になると思 いますが、returnはまだ無効にならないですよねえ。 たとえばCommon Lispで (defun m () (let ((pr (get-proc (lambda () (return-from m 3))))) (funcall pr))) (defun get-proc (pr) pr) (m) => 3 > あと,引数なしの Proc.new はやめよーかなー,と仰ってまし > たが,2.0 はそうなると考えちゃっていいですか? Procオブジェ > クトがOrphan になるタイミングがコンパイル時にわかって嬉しい > です. そのう、Proc.newとlambdaと、単に{ ... }でくくったブロックの違いが相変 わらず良く分かってないのですが(どれもクラスが違うのだろうか)、そもそも { ... }のブロックが複数回呼ばれるのがいやなのだから、 iter( ... ) { ... } という文法で、 (1)暗黙の引数で受けとりyieldでブロックを呼び出す (2)名前つきの引数で受けとりcallで呼び出す の両方を許すのはやめて、(1)だけにすれば良いんでは、とか思ってしまいま す(Procを渡したければ、陽に渡せばええやん、とか)。 > Orphanの定義ですが,「ブロック付きメソッド呼び出しのとき, > メソッド実行中,そのブロックで Proc オブジェクトを作り,そ > れがのメソッド呼び出しから抜けた後でも生きてるとき,その Proc > オブジェクトを Orphan とする」という定義で考えてます.なんか > 間違えてたらご指摘ください. Rubyが分かってないなあ、私。 「ブロック付きメソッド」って上のコードではget_procのことですよねえ。 メソッドget_proc実行中にProcを作っているの? すでに作られたProcが渡され てきて、それを返しているだけじゃないの? 前田敦司 -- ML: yarv-dev quickml.atdot.net 使い方: http://www.atdot.net/~ko1/quickml
185 2004-09-15 21:12 [ko1 atdot.net ] return from orphan Proc object -> 187 2004-09-15 22:02 ┣[maeda-yarv atusi.org] 188 2004-09-16 01:01 ┃┗[matz ruby-lang.org ] 190 2004-09-16 01:45 ┃ ┗[ko1 atdot.net ] 192 2004-09-16 02:13 ┃ ┗[matz ruby-lang.org ] 193 2004-09-16 07:53 ┃ ┗[ko1 atdot.net ] 194 2004-09-16 08:14 ┃ ┗[matz ruby-lang.org ] 195 2004-09-16 08:37 ┃ ┣[ko1 atdot.net ] 196 2004-09-16 08:50 ┃ ┃┣[matz ruby-lang.org ] 198 2004-09-16 12:11 ┃ ┃┗[maeda-yarv atusi.org] 202 2004-09-16 16:32 ┃ ┃ ┗[ko1 atdot.net ] 211 2004-09-16 17:52 ┃ ┃ ┗[maeda-yarv atusi.org] 214 2004-09-16 18:02 ┃ ┃ ┗[ko1 atdot.net ] 197 2004-09-16 11:47 ┃ ┗[maeda-yarv atusi.org] 199 2004-09-16 14:04 ┃ ┣[matz ruby-lang.org ] 200 2004-09-16 16:23 ┃ ┃┣[ko1 atdot.net ] 204 2004-09-16 16:58 ┃ ┃┃┣[matz ruby-lang.org ] 208 2004-09-16 17:22 ┃ ┃┃┃┗[ko1 atdot.net ] 209 2004-09-16 17:30 ┃ ┃┃┃ ┗[matz ruby-lang.org ] 212 2004-09-16 17:53 ┃ ┃┃┃ ┗[ko1 atdot.net ] 216 2004-09-16 18:18 ┃ ┃┃┃ ┗[matz ruby-lang.org ] 207 2004-09-16 17:19 ┃ ┃┃┗[maeda-yarv atusi.org] 210 2004-09-16 17:42 ┃ ┃┃ ┗[ko1 atdot.net ] 213 2004-09-16 18:01 ┃ ┃┃ ┣[maeda-yarv atusi.org] 219 2004-09-16 18:24 ┃ ┃┃ ┃┗[ko1 atdot.net ] 224 2004-09-17 00:21 ┃ ┃┃ ┃ ┗[maeda-yarv atusi.org] 225 2004-09-17 00:45 ┃ ┃┃ ┃ ┗[ko1 atdot.net ] 226 2004-09-17 12:02 ┃ ┃┃ ┃ ┗[maeda-yarv atusi.org] 227 2004-09-17 12:11 ┃ ┃┃ ┃ ┣[ko1 atdot.net ] 228 2004-09-17 13:38 ┃ ┃┃ ┃ ┗[ko1 atdot.net ] 218 2004-09-16 18:22 ┃ ┃┃ ┗[matz ruby-lang.org ] 220 2004-09-16 18:31 ┃ ┃┃ ┗[ko1 atdot.net ] 221 2004-09-16 19:03 ┃ ┃┃ ┗[matz ruby-lang.org ] 222 2004-09-16 19:08 ┃ ┃┃ ┗[ko1 atdot.net ] 223 2004-09-16 19:12 ┃ ┃┃ ┗[ko1 atdot.net ] 201 2004-09-16 16:33 ┃ ┃┗[maeda-yarv atusi.org] 206 2004-09-16 17:01 ┃ ┃ ┗[matz ruby-lang.org ] 215 2004-09-16 18:06 ┃ ┃ ┗[maeda-yarv atusi.org] 217 2004-09-16 18:20 ┃ ┃ ┗[matz ruby-lang.org ] 203 2004-09-16 16:38 ┃ ┗[ko1 atdot.net ] 189 2004-09-16 01:04 ┗[matz ruby-lang.org ] 191 2004-09-16 01:51 ┗[ko1 atdot.net ] 205 2004-09-16 16:58 ┗[ko1 atdot.net ]