From: matz@... (Yukihiro Matsumoto) Date: 2003-01-02T11:42:20+09:00 Subject: [ruby-dev:19285] Re: ruby-1.8.0 / yield(nil)とyield()の まつもと ゆきひろです In message "[ruby-dev:19283] Re: ruby-1.8.0 / yield(nil)とyield()の" on 03/01/02, Masatoshi SEKI writes: |> そして、実を言えば、LocalJumpError にしなくても実現できるんじゃないか、 |> と疑っています。結局は手続き呼び出しなんだから、スタックの実体がクライ |> アントとサーバにわかれているとはいえ、概念的にはひとつのスタック/スレッ |> ドなわけで、ブロックをその(クライアント側の)スレッドの上で動せば、ブロッ |> ク内の break/retry でクライアント側のスタックが縮んでbreak/retry に応 |> じた適切なところに制御が飛ぶし、そのときに ensure を使ってサーバ側に残っ |> ているスタックを適切な所まで縮めればそれで済むんじゃないか、と思ってい |> ます。 | |ふむむ。実現できたらいいなあ。 |いまのRubyが持ってるしかけでやるにはどうしたらいいんだろう。 |ちょっと考えてみます。 |ブロックの内でbreakやretryが行われたことを知るにはどうしたら |いいんだろう。またそれをサーバに伝えるには… 田中さんがおっしゃっているのは「breakやretryが起きたことを知 る」のではなく、「(なんらかの方法で)抜けたことをensureで検出 する」ことで実現できるのではないかということです。