From: masaki Date: 2002-07-24T22:53:15+09:00 Subject: [ruby-dev:17809] Re: self in block 正木です。 From: TAKAHASHI Masayoshi Subject: [ruby-dev:17791] Re: self in block Date: Wed, 24 Jul 2002 12:29:57 +0900 > > 別に initialize であっても、 > > class Foo > def initialize(&block) > yield() > end > end > > Foo.new(){<> > @a, @b, @c = some_invalid_access() > } > > とかできそうです。 {<> ...} の時は外部情報は持ち込めず、しかも内部 method しか使えないので かえって安全だと思いますが。それより Foo.new(){|| system "rm -rf /"} とかされるのは構わないんですか? > # と思ったらすでに田中 哲さんの[ruby-dev:17781]が。 自分の考えている { ...} が使えなくなるからというのは予想できません でした。 私が聞いたのは、今までは initialze に与えられる block が {<> ...} の形の 場合を考慮する必要がなかったのに、余計な心配をしなければいけなくなるという ことで、その心配が現実になるのは、どういう場合ですかということです。 絶対にないということは言い切れないので、 security が必要な program では 使えないという条件をつけています。 > ……ということはともかく、それ以前に、「initializeの場合のみかつ > {<...> ....}を使っている場合はコンテキストを変える」という変更は、 > どうもad hocな対応に見えるのが気になるんですけどね。 initialize は元々特別な method なので、いいかなと思ったんですが。 それに私の案は採用されないことが決まったので、この話は終りにしたい と思います。 他の人にも便利だと思って提案したんですが、こんなに抵抗が強いとは 予想外でした。