From: "たけ(tk)" Date: 2001-04-04T13:20:54+09:00 Subject: [ruby-dev:12757] Re: Named Array Ref たけ(tk)です。 [ruby-dev:12755] Re: Named Array Ref にて matz@zetabits.com (Yukihiro Matsumoto) さん 曰く: 》|名前付きに配列参照というのは出来ませんでしょうか?。 》| 》| foo.bar[0] = baz 》| 》|でfooの配列要素barに代入できるものです。 》 》できません。上記の式にはすでに「fooのbarメソッドが返す値の 》[]=メソッドを呼び出す」という意味があり、式の解釈に曖昧性が 》出るからです。  了解。ただし後述。 》別解としてはbarメソッドが配列または 》fooのプロパティを表現する[]と[]=のメソッドを持つオブジェクト 》を返す方法も考えられます。  この手の解法は実現済みです。ただしエレガントでないというのが実感。また、 まだRubyレベルでの解法なので、拡張ライブラリ(Object Pascal/C)で使うには 問題がある。 http://www.freeml.com/ml_view.php?ml=ap-list&pg=1335 ## 利用部分 class Foo def bar_aref(i) print "bar[#{i}]\n" end def bar_aset(i,v) print "bar[#{i}]=#{v}\n" end attr_indexer :bar end foo = Foo.new foo.bar[1] ## Indexer#[] を通じて Foo#bar_aref を呼び出す foo.bar[2]=3 ## Indexer#[]= を通じて Foo#bar_aset を呼び出す。  ApolloではDelphi(Object Pascal)で実現することも可能なのですが、Cで作っ て標準で装備すればApollo以外でも使えるようになります。どうでしょうか?。  さらに、次のように書いた場合に、上記のように解釈してくれれば、あたかも 名前付きの配列参照がRubyでもできる、ように見えると思います。どんなもので しょうか?。 class Foo def bar[](i) print "bar[#{i}]\n" end def bar[]=(i,v) print "bar[#{i}]=#{v}\n" end end たけ(tk)=熊谷秀武