けいじゅ@日本ラショナルソフトウェアです.

In [ruby-list :06565 ] the message: "[ruby-list:6565] Re: Counter
class [Re: i++ ] ", on Feb/20 15:13(JST) toyofuku / juice.or.jp writes:

>  豊福@パパイヤです。

>  ここまでくるともう変数クラス作った方がよく
>ないですか。

>class Var
(中略)

ふーむ. なるほどー. より一般的になっていますね(^^;;;

>	x = Var(2)
>	y = Var(3)
>	z = x * y
>
>  coerce がよくわかってないのですが、これで
>	z = x ** y    # z = 2 ** 3
>とすると 9.0 になってしまいます。
>なぜ 2 ** 3 ではなくて 3.0 ** 2.0 になって
>しまうのでしょうか。 other.coerce(@obj).reverse
>の reverse はない方がいい?  reverse なく
>してもまだ 2.0 * 3.0 になってるし。

ここは以下ので良いと思います.

  def coerce(other)
    return other, @obj
  end

やるべきことは相手を変換することではなくて, 自分が計算できるように変換
することですから.

>  それから
>>   def coerce(other)
>>     case other
>>     when Counter
>
>をまねして
>
>  def coerce(other)
>    case other
>    when Var
>      ...
>
>とかもやってみたのですが、when Var のところに
>来ません。

えーとですね.

  Var(1) ** Var(2)

は, Var#** がメソッドミッシングなので

  1 ** Var(2)

がよばれて, Fixnum#**がVarとの計算がわからんので, そこで 

  Var(2).corece(1)

が呼ばれているからですね.

>Var(1) === Var も真にならないようですがどこらへんがあやしいでしょうか。

when Var は Var === Var(1) ですので trueになります.


__
................................石塚 圭樹@日本ラショナルソフトェア...
----------------------------------->> e-mail: keiju / rational.com <<---