From: matz@... (Yukihiro Matsumoto) Date: 2002-07-22T16:41:11+09:00 Subject: [ruby-dev:17762] Re: self in block まつもと ゆきひろです In message "[ruby-dev:17761] Re: self in block" on 02/07/22, masaki writes: |青木さんや高橋さんの危惧はよく分かりましたので、私の提案を次のように |変更します。 | |"initialize に { ...} の形で与えられた block に対しては、 |その context を、initialize の中での context にする。 |$SAFE=1 のときにはこの機能は使えない。" "initialize に { ...} の形で与えられた block に対しては、 その context を、initialize の中での context にする。 よくわからないんですが、 Foo.new { ... } の場合には、ブロック内部での * selfはFooのインスタンス * @fooはFooのインスタンス変数 * foo()はFooのメソッド呼び出し になるということでしょうか。とするとたとえば、 @title = "widget title" Foo.new {<> set_title @title } のようなものは動かないってことですよね。こういう場合には @title = "widget title" Foo.new {|| set_title @title } としろということでしょうか。なんだか <> に複数の意味を与えて いるので混乱しそうな気がします。 それと $SAFE=1 のときにはこの機能は使えない。 ってのは理由もよくわからないのですが @title = "widget title" Foo.new {<> set_title @title } という同じプログラムが、$SAFEの値によって挙動が変化すること になると思うので、かなりまずい仕様だと思います。 私、正木さんが実現したいことがいまだによくわからないんですが。 なにか読み落としているのでしょうか。 まつもと ゆきひろ /:|)