[#6862] Re: http_get.rb — 青山 和光 <PXN11625@...>

In-Reply-To: [ruby-list:6844] Re: http_get.rb

15 messages 1998/03/01

[#6906] ruby's Icon ? — 藤本尚邦 / FUJIMOTO Hisakuni <hisa@...>

藤本です、こんにちは。

25 messages 1998/03/03
[#6907] Re: ruby's Icon ? — matz@... (Yukihiro Matsumoto) 1998/03/03

まつもと ゆきひろです

[#6908] Re: ruby's Icon ? — 藤本尚邦 / FUJIMOTO Hisakuni <hisa@...> 1998/03/03

藤本です、こんにちは。

[#6911] Re: ruby's Icon ? — OZAWA Sakuro <ozawa@...> 1998/03/03

小澤さくです。

[#6912] Re: ruby's Icon ? — 藤本尚邦 / FUJIMOTO Hisakuni <hisa@...> 1998/03/03

藤本です、こんにちは。

[#6914] Re: ruby's Icon ? — 藤本尚邦 / FUJIMOTO Hisakuni <hisa@...> 1998/03/03

藤本です、こんばんは。

[#6918] manual 1.18b index — WATANABE Tetsuya <tetsu@...>

ruby-man-1.1b8 で、name タグがついているものを拾い集めて

17 messages 1998/03/04
[#6921] Re: manual 1.18b index — matz@... (Yukihiro Matsumoto) 1998/03/04

まつもと ゆきひろです

[#6954] Re: ruby's Icon ? — nosuzuki@... (Norio Suzuki)

こんばんは。鈴木教郎です。

18 messages 1998/03/04
[#6964] Re: ruby's Icon ? — matz@... (Yukihiro Matsumoto) 1998/03/05

まつもと ゆきひろです

[#7023] infinity — Tadayoshi Funaba <tadf@...>

ふなばです。

41 messages 1998/03/09
[#7029] Re: infinity — shugo@... (Shugo Maeda) 1998/03/09

前田です。

[#7033] Re: infinity — keiju@... (石塚圭樹 ) 1998/03/09

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

[#7041] Re: infinity — Kazuhisa YANAGAWA <katze@...> 1998/03/10

In message <199803091741.CAA05774.keiju@cupmail0.rational.com>

[#7048] Re: infinity — keiju@... (Keiju ISHITSUKA) 1998/03/10

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

[#7049] Re: infinity — matz@... (Yukihiro Matsumoto) 1998/03/10

まつもと ゆきひろです

[#7051] Re: infinity — keiju@... (石塚圭樹 ) 1998/03/10

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

[#7054] Re: infinity — matz@... (Yukihiro Matsumoto) 1998/03/10

まつもと ゆきひろです

[#7050] Re: infinity — Kazuhisa YANAGAWA <katze@...> 1998/03/10

In message <199803100359.MAA08628.keiju@cupmail0.rational.com>

[#7259] Socket#shutdown — keiju@... (Keiju ISHITSUKA)

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

16 messages 1998/03/28
[#7260] Re: Socket#shutdown — matz@... (Yukihiro Matsumoto) 1998/03/28

まつもと ゆきひろです

[#7265] Re: Socket#shutdown — keiju@... (石塚圭樹 ) 1998/03/29

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

[ruby-list:6975] Re: coerce

From: toyofuku@...
Date: 1998-03-05 19:43:06 UTC
List: ruby-list #6975
  豊福@パパイヤです。
メールの津波に押し流されてます。

けいじゅさん
>>  class Fixnum
>>    alias plus_exept_for_matrix +
  ...
>>  end
>>
>>というのはできませんか。
> 
> いや, できます. ただ, この方法をすべてのクラスがとると
> 1. 複数のクラスでaliasするとわけがわからなくなる(まあ, coerceベースで
>    も十分そうですが)
> 2. たぶん, 一番良く利用されるFixnum#+が遅くなる.
> 3. 一番の問題が, aliasすべきクラスが多いのでcoerceで対応した方が楽,

  私もそう思います。:-)

> そうですね. そういう意味ではこのクラスがどのクラスとの演算(coerce)をサ
> ポートしているか明確にしなくてはなりませんね. さらに, 相互の互換性はお
> 互いに調整する必要がありますね.
> # 今までは私しか作っていないので問題なかったんですが(^^;;; 
> ちなみに現在は:
>   (Fixnum->Bignum->Float) -> (Rational <-> Complex) -> (Matrix <-> Vector)
> となっています. 

  これはしょうがないのですかね。すべてのクラスに
平等にするには足し算のクラスでも作って

class PlusOp
  def PlusOp.plus(x, y)
    x と y のタイプのすべての組み合せで場合分け
   してそれぞれの足し算を実行

    # 新しいクラスを作ったらそれに関する足し算を
    # このメソッドに追加する
  end
end

の PlusOp.plus を呼ぶようにするくらいしか
思いつきません。

>>  coerce という機構は ruby で初めて知ったのですが
>>Smalltalk ではここらへんどういう態度をとっているの
>>でしょうか。
> 
> もっと単純です.
> 昔かいた本 ``オブジェクト指向プログラミング'', ascii, pp.277-282 の中
> にその記述があったのでそれをぬきだしますと::

  簡単なケースしか扱っていないのですね。

> ちなみにこの後, 他の技法である.
> * ダブルディスパッチ
> * マルチメソッド(CLOSとか)
> の方法も簡単に説明してあります.

  聞いてばかりですみませんが、もし簡単なこと
でしたら教えて下さい。

>   when Matrix 
> のあとは何も書いてないのでcaseをぬけてfail以下に進みます. Cだとbreakす
> る必要があるのでwhen Matrix/elseは同じ処理をすることになるんですがruby
> では違いますよね.

  C の case と混同していました。break がないから
else の方に流れていくのでは?と。

>>  上の方法でも新しい型を作って実質そこにすべてまか
>>せているようにバラエティあふれる演算に対して引数が
>>other だけの coerce に協力させるのはきびしいような
>>気がするのですが。
> 
> 実際の話として, 数値的クラスってそんなに数はないと思いますし, 一般の人
> が作るものでもないので, とりあえず対応できるってことでも満足するべきか
> な? と思っています. 
> まだ, 今なら本当に必要であるならば変更(のリクエスト)は可能であると思い
> ますので検討の価値はあると思います.

  Scalarクラスを使う方法で気になるのは

(1) coerce には演算の区別がないので一つの演算が
  Scalarクラスを使うことになると他のすべての
  演算も Scalarクラスを使うことになる。もし別の
  演算がさらに別のクラスを使いたくなると・・・

  ==> coerce の引数にメソッドを追加してはどうか

(2) 本当は Numericクラスあたりでやらしたいことを
  わざわざ Scalarクラスのオブジェクトを作って
  それにやらしている。

  ==> 適用すべきメソッドを coerce の返値で教えて
      やってはどうか

  この方法で Matrix 関連を書くと次のようになります。
  書き方はいい加減ですがやりたいことはわかって
もらえると思います。

class Matrix
  def coerce(other, meth)
    case meth
    when :+
      case other
      when Numeric
        エラー
      ...
      end
    when :*
      case other
      when Numeric
        return other, self, Numeric::*
      ...
      end
    ...
    end
  end
end

class Numeric
  def *(other)
    case other
    when Matrix
      return other.collect{|e| self * e}
    ...
    end
  end
end

class Fixnum
  def *(other)
    case other
    ...
    else
      x, y, meth = other.coerce(self, :*)
      if (meth)
        x.send(meth, y)
      else
        x * y
      end
    end
  end
end


  ついでに matrix.rb での質問です。

  Scalar::/
      case other
      when Matrix
	self * _M.inverse

の _M って何ですか。

  Scalar::**
      case other
      when Matrix
	other.powered_by(self)

の powered_by って何ですか。
  ここはエラーにしそうなところですが。
まさか exp(M) を計算して返そうと・・・
---
			豊福@パパイヤ
			unbound@papaya.juice.or.jp
			toyofuku@juice.or.jp

In This Thread

Prev Next