From: "T.Shirakawa" Date: 2001-10-17T21:43:20+09:00 Subject: [ruby-list:31917] Re: 先祖がえり 白川です。 On Wed, 17 Oct 2001 00:24:36 +0900 Minero Aoki wrote: > あおきです。 > > なかだです。 > > > class MyArray < Array > > > wrapper_def:&, |, *, +, -, <<, [], assoc, at, clear, などなど > > > def toCSV() > > > end > > > end > > > とかできると楽しいかな... > > > >  これ、ラッパーなんですか? どちらかというとdelegate.rbや > > forwardable.rbみたいのを指すような気がしますが。 あおきさんに頂いたメールを見て、やっと、なかださんの 仰った意味が分かったかも... 私の考えていたような機能をもつモジュールが既にあった ということだったのですね。 勉強してきます。 > require 'forwardable' > > class MyArray > extend Forwardable > def initialize > @array = [] > end > def_delegators :@array, *%w( & | * + - << [] assoc at clear ) > end > > とすればできます。ああ、def_delegators の行がわかりにくそう。 > > ivar_name = '@array'.intern > methods = [ '&', '|', '*', '+', '-', '<<', '[]', 'assoc', 'at', 'clear' ] > def_delegators( ivar_name, *methods ) なるほど。 理解しました。 目からうろこです。 > あと「:」の付きかたを逆にとってるんだろうなあ。 も、これを見て理解です。 なるほどぉ、そーなってたのか... attr_writerとかも そーいう仕組みだったのですねぇ ありがとうございました。 > てなところでしょうか。リファレンスマニュアル検索してみてください。 ひととおり本は読んでたのですが、 その美しさには気が付いてませんでした。 ---------------------- 白川貴久