まつもと ゆきひろです.
In message "[ruby-list:1458] Re: サブクラスの作成再び"
on 96/12/24, Sinichiro Dezawa <dezawa / miya.fujifilm.co.jp> writes:
|> castってのは変数に型がある言語でだけ有効だと思うのですが.
|
| reservList = (Reserved)[ "9a","9a","9a","9a" ]
|
|ってやって reservList を明示的に Reserved クラスにする、
|って具合に、般的な方法にならないかな、と。
一般的な方法は無いです.ごめんね.
|そう言えば、演算子の左右の型が違った時の挙動ってかいて
|あったかな、、、。
ええと,数値周りですね.ちゃんと説明している自信が無いので,
ここでもう一度説明します.
数値計算に関する演算子はメソッドとして起動されます.
つまり,
a + b
はaのクラスの+というメソッドを起動します.ですから,左辺の型
にあったメソッドが起動されることになります.では,右辺の型は
どうするかというと
基本的にメソッドが右辺の型に応じて処理している
のが実情です.ただし,新しく追加された型(Complexとか)にも対
応するために,数値演算のメソッドは
知らない型はcoerceしてから再計算
という戦略を取っています.つまり概略は
def +(other)
case other.type
when ...
...
else
x, y = other.coerce(self)
x + y
end
end
という感じです.数値系のクラスはcoerceという型変換メソッドを
持っていまるはずなので,これを利用しています.
まつもと ゆきひろ /:|)