From: Koji Arai Date: 2001-06-11T06:24:10+09:00 Subject: [ruby-dev:13539] Re: 無名クラス/モジュール 新井です。 In message "[ruby-dev:13529] Re: 無名クラス/モジュール" on 09 Jun 2001 22:44:17 +0900, Tanaka Akira wrote: > In article <200106090052.JAA24896@smtp1.nifty.ne.jp>, > Koji Arai writes: > > > rubyist から dev に移ります。 > > rubyist の前は bts だったことをご存知でしょうか... > http://www.ruby-lang.org/cgi-bin/ruby-bugs-ja/questions?id=52;page=1;user=guest 存じ上げております(^^ > > 単純に利用者の立場として「代入時にクラス名決定」は以下の点で納得できる > > o 単純で理解しやすい。 > > 私も考えたのですが、必ずしも「単純で理解しやすい」とはいえない場合があ > るので、現在の挙動でもべつに問題ないかな、と思っています。 以下が理解しにくいのはスクリプトが理解しにくいだけだと思いま す。単純に代入時に名前を決定できないなら、無名のままで良いと 思うのです。 > n=8 > name="A" > cs=[] > n.times {cs << Class.new} > cs.each {|a| > cs.each {|b| > a.const_set(name.succ!,b) > } > } > A=cs[4] > > たとえば、上記のコードを実行した結果、cs[0], ... cs[7] のそれぞれの名 > 前はどうなるべきか、とか。 cs[4] 以外は無名で良いのではないかと。この例だととても名前を 確定させるのを期待してるとは思えないし(^^; (でも、後のまつもとさんの例を見ると迷ってしまいました) In message "[ruby-dev:13531] Re: 無名クラス/モジュール" on 09 Jun 2001 23:41:27 +0900, matz@zetabits.com (Yukihiro Matsumoto) wrote: > まつもと ゆきひろです > |グローバル変数だと処理のフック(代入が代入以上の意味を持つ)を > |許してますよね? > |# グローバル変数は特殊用途だから許容しているとも言える? > > そうですね。 $stdout などのフックというか副作用は困ったちゃんです。ドキュ メントに触れてないんだよなあ。(ちゃんと挙動を追ってないから 書いてない) > |ということは代入時にクラス名を決定すべきなのだと思いますが、 > |いかがなものでしょう? > > しかし、代入した時点で名前が決定するとは限らないわけで(たと > えば定数が定義されたモジュールもまた名前がなかったりする場合)、 > そうするとそこまでする理由はあんまりないかなあって思ったりし > てます。 > > a = Class.new > a.class_eval{ > Foo = Class.new > p Foo > } > Bar = a > p Bar::Foo > > うーん、どんなもんだか。 この挙動は期待してしまいそうですね。 代入時と参照時の両方で名前を決定させれば良いというのもあるけ ど、もともと「ドキュメント書くのが複雑なのは仕様が理解しにく いからだ」っと思ってこの要求が来てます。ので、そういう意味だ とあんまり賛成できないな。現状維持かなあ。。。 -- 新井康司 (Koji Arai)