なかだです。

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るくらいがちょうどいいかも;-)" 伸悦