なかだです。 At Mon, 11 Oct 1999 07:05:38 +0900, matz / netlab.co.jp (Yukihiro Matsumoto) wrote: > 現在の attr の仕様は「渡されたシンボルの末尾に = を付加した > メソッドを用意する」ですから、仕様通りです。 でも attr_writer :a= を繰り返すと "a===", "a====" ... とどんど んどんどん(^^;長くなって行くようなんですが。 module Foo attr_reader :a=, :r end sym = "a=" loop do p Foo.instance_methods sym += "=" puts "#{sym} = #{sym.intern}" module Foo attr_writer :a=, :w end sleep 0.5 end # 結構面白いのは面白いんですが。 どうやら最初に "a=" と同じ ID に "a==", "a===" ... が登録されて 行くようです。 あとこれもまずいと思うのですが。本当だったら無限ループするはず では。 ruby -e 'p foo = "|=".intern sym="a" until (sym + "=").intern == foo p sym sym = sym.succ end' 8700 "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
--- dist/parse.y Mon Oct 4 23:10:12 1999 +++ build/parse.y Mon Oct 11 13:27:56 1999 @@ -4421,9 +4421,16 @@ buf[last] = '\0'; id = rb_intern(buf); - if (id > LAST_TOKEN) { - id = rb_id_attrset(id); - goto id_regist; + if (is_attrset_id(id)) { + /* already defined as attribute setter, assign new id */ + id = ID_ATTRSET; + } + else { + if (id > LAST_TOKEN) { + id = rb_id_attrset(id); + goto id_regist; + } + /* op= form, assign new id */ + id = ID_ATTRSET; } - id |= ID_ATTRSET; } else if (ISUPPER(name[0])) { -- そうだ 強気に ちょっと インチキに☆彡 中田 "Bugるくらいがちょうどいいかも;-)" 伸悦