From: gotoken@... (GOTO Kentaro) Date: 1999-12-10T15:03:03+09:00 Subject: [ruby-list:19386] Re: オブジェクトの代入について ごとけんです In message "[ruby-list:19380] Re: オブジェクトの代入について" on 99/12/10, Akinori MUSHA aka knu writes: > ただ、そうすると今度はArrayクラスはどうなんだということになります。 >ary + aryは可換ではないですが、ary * aryとするとまるでベクタ同士の >積のように見え、直感に反するような気がします。 これは数値計算的になかなか説得力あります。ちなみにこの問題は すでに近所で一般的に議論され結果としてこういうの作ってます。 Array#compose [a,b,c,...].compose{|i,j,k,...| ....} 多次元配列a,b,c,...を要素とするArrayに機能する。各配列の要 素をブロック変数とし、演算を施した結果の多次元配列を返す。 [a,b].compose{|i,j| i*j if i > 0} は以下とほぼ等価である。 c = [] a.each_indeces{|i| c[i] = a[i] * b[i] if a[i] > 0} a = c この応用として、 def multiply(other) [self,other].compose{|i,j| i*j} end alias x multiply というようなものも作りました。ary1. x ary2 ってかんじです。 > さらにコンピュータ言語の場合、書かれたコードを素直に「読めるか」と >いうのがとても重要ですが、 "abc" * "def" も [1,2,3] * [4,5,6] も >ちょっと読みづらいです。'*' に連結のニュアンスを見いだせません。 ># 慣れの問題だろうけど 逆に一般の配列同士の * にはいかなるニュアンスも見出せないの で、強く印象づけられるという側面もあるかなっと ^^;; -- gotoken