ごとけんです

In message "[ruby-list:19967] Re: メソッド名の制限?"
    on 99/12/29, "Hideaki Takata" <hideakit / d3.dion.ne.jp> writes:

>要するに、
>クラスを作る仕事には、クラスの変数は変数として、メソッドはメソッドとし
>
>そう見えるように扱える書き方が望ましく、クラスを使うだけのお手軽な仕事
>には
>変数的なものを扱ってる時にも、クラスの変数は直接扱わない、
>細かいことはクラスがよきにはからってくれる、
>しかも、他の言語の変数の取り扱いで慣れ親しんだ書き方でアクセスできる
>ってのがうれしい気がします。

なるほど。
イメージとしては、まつもとさんのいう method(x) = value かなぁ。

>で、Rubyのobject.method=とかobject.[]=なんてメソッドは
>少なくとも僕にとっては、
>両方のニーズを単一の言語でシンプルに実現している気がして
>うれしいのです。

逆に僕はこの手の要求に対しては引数つきアクセスメソッドのある
インスタンス変数を介してモノを考えるようになってました ^^;;

>Recipeのメンバである@zairyouの要素が変わる時に、
>Recipeの側で何かしなくてはならないなら
>クラス使用者が気にしないでも自動的にそれをやってくれて、しかも
>クラスを使ってる人は@zairyouだけを扱うことだけを気にしていればよい
>という状況がありがたいかなと思っただけです。
># 本格的にそうしたいんなら、@zairyouにRecipeの参照を持たせて、
># 特異メソッドでRecipeに変更をお知らせしたほうがいいのでしょうが
># ここでは、そこまで大掛かりなことをしないという前提の話です。

あぁ、やっと分かりました。@zairyou の要素が参照や更新された
ときにself に副作用を起こしたいということですね。たしかに、
それはいまの Ruby だと面倒ですね。てゆーか、呼出し元を知る方
法(僕と西さんそれぞれ sender と yourself と呼んでいるもの)が
ないと self を参照できないから特異メソッドではすんなりとは実
現できないですね。

ただ、まつもとさんのいうように Klass#method()= の方がすっき
りするような。まぁ Klass#method[]= もあってもいいけど、ちょっ
と気持ち悪いなぁ。self 内では self.method[k] = v のようにレ
シーバを指定しないといけなさそうだからなのかなぁ(自分でもよ
く分かってない)。

-- gotoken