>>49 1.実装レベルで何をしているかは知らないけど、 意味上では同じメソッドなら大体同じ意味、 というのがオブジェクト指向のミソです(たぶん)。 なので、 a + b とあれば、a と b を足しているというそのままの意味です。 足せないようなオブジェクトだったらそもそも + というメソッドは定義しませんから。
class A @@val = 1 def A.get_val @@val end end A.get_val #=> 1
オブジェクト指向については僕が言うと、 まず説得力のある文にならないので誰かよろしくお願いします…
91 名前: 虹 投稿日: 2001/07/08(日) 04:06
>>90でもある通り、Rubyは標準クラスにメソッドを追加したり変更した りできるので、気に入らないなら気に入るようにしてしまえば良い。 例えば>>39の1も class String alias __plus + def +(other) if other.is_a?(Numeric) eval(self) + other else __plus(other) end end end とか書いてしまえば希望の動作をするハズ。 # ま、でもソースが他人にわかりにくくなるのでちょっと何だが。
ただまあ、単項演算子やら2項演算子やらは既存のもののオーバーロードしかできない、 とかの C++ の仕様は、元が C だったってこと思うとまあ合理的だよね、と感じるし、 オーバーロードの濫用もそれほど行われていないと思うな。後者の根拠は、どんな言語で あろうが、その使われ方の良さ、酷さは、使う人間次第だと思うから。C++を使っている 人たちは、平均すれば、おそらくそれほど馬鹿ではない。
a + b + c + dっていう式を見ると、つい頭の中で 主役は「+」、a, b, c, dは4つの対等な引数、 などと思ってしまうのだけど、OO指向では aが最初の主役のオブェクトでレシーバで、「+」はメッセージでbは引数、 a+bの実行結果が次の主役でレシーバで、2個目の「+」はメッセージでcは引数 っていう風に考えないといけないのかな。