[#7631] 1.3 to 1.4 — Katsuyuki Komatsu <komatsu@...>

小松です。

26 messages 1999/08/12
[#7632] Re: 1.3 to 1.4 — matz@... (Yukihiro Matsumoto) 1999/08/12

まつもと ゆきひろです

[#7634] Re: 1.3 to 1.4 — Katsuyuki Komatsu <komatsu@...> 1999/08/13

小松です。

[#7636] Re: 1.3 to 1.4 — matz@... (Yukihiro Matsumoto) 1999/08/13

まつもと ゆきひろです

[#7638] cvs HEAD (Re: Re: 1.3 to 1.4) — EGUCHI Osamu <eguchi@...> 1999/08/13

えぐち@エスアンドイーです。

[#7647] Re: cvs HEAD (Re: Re: 1.3 to 1.4) — matz@... (Yukihiro Matsumoto) 1999/08/13

まつもと ゆきひろです

[#7641] Re: [ruby-ext:00382] New coerce scheme — keiju@... (石塚圭樹)

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

26 messages 1999/08/13

[ruby-dev:7697] Re: [ruby-ext:00382] New coerce scheme

From: Shin-ichiro HARA <sinara@...>
Date: 1999-08-16 14:45:54 UTC
List: ruby-dev #7697
原です。

>   豊福@パパイヤです。

>   で、どうなって欲しいかですが、思いつきの案を書きます。
> 
> (i) A は
>     a op b
>   が計算できないときは
>     b.(左側からのop)(a)
>   として B に完全に任す。
> 
> (ii) B に
>     def (左側からのop)(other)
>   が定義されていればそのメソッドで処理される。
> 
> (iii) それがないときは
>     def 左側からの一般的演算用処理(op, other)
>   のメソッドで処理される。
>   (このメソッドが従来の coerce に対応し self と other
>    から a' と b'を計算して a' op b' で結果を出したりする)

この案はかなり納得のいくアイデアです。

>   これは以前石塚さんの説明にあった左側からの演算用メソッド
> の話と、引数にopを含む新coerce案を合わせたようなものになっ
> てます。

ただ、(ii) があれば (iii) はほとんど必要ないですよね。前に
必要になる例をあげていただいた覚えがありますが。

>   「左側からのop」をどう表現するのかとか、それがないとき
> どう (左側からの一般的演算用処理)(op, other) に変換するのか
> とかは全然考えてないです。

字句解析上可能かどうかわからないのですが、2項演算子の後ろ
に ! を付けて反対にしたらどうでしょう。で、Numeric の様な基底ク
ラスで +(other) の定義を other +! self にし、+!(other) の定義を
a, b = other.coerce(self, :+!); b + a; みたいにしておきます。

サブクラスは、知らない相手に対する + や +! は super して、さら
に coerce は再定義するという形で拡張していく訳です。
 

In This Thread