[#1553] [BUG] String.dup — keiju@... (Keiju ISHITSUKA)

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

51 messages 1998/03/03
[#1554] Re: [BUG] String.dup — matz@... (Yukihiro Matsumoto) 1998/03/03

まつもと ゆきひろです

[#1564] Re: [BUG] String.dup — keiju@... (石塚圭樹 ) 1998/03/03

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

[#1565] Re: [BUG] String.dup — matz@... (Yukihiro Matsumoto) 1998/03/03

まつもと ゆきひろです

[#1572] Re: [BUG] String.dup — keiju@... (石塚圭樹 ) 1998/03/03

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

[#1578] Re: [BUG] String.dup — matz@... (Yukihiro Matsumoto) 1998/03/04

まつもと ゆきひろです

[#1580] Re: [BUG] String.dup — shugo@... (Shugo Maeda) 1998/03/04

前田です。

[#1584] Re: [BUG] String.dup — matz@... (Yukihiro Matsumoto) 1998/03/04

まつもと ゆきひろです

[#1591] Re: [BUG] String.dup — keiju@... (石塚圭樹 ) 1998/03/04

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

[#1593] Re: [BUG] String.dup — matz@... (Yukihiro Matsumoto) 1998/03/05

まつもと ゆきひろです

[#1605] Re: [BUG] String.dup — keiju@... (石塚圭樹 ) 1998/03/07

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

[#1606] Re: [BUG] String.dup — shugo@... (Shugo Maeda) 1998/03/07

前田です。

[#1609] Re: [BUG] String.dup — keiju@... (石塚圭樹 ) 1998/03/08

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

[#1625] Re: [BUG] String.dup — shugo@... (Shugo Maeda) 1998/03/09

前田です。

[#1628] Re: [BUG] String.dup — keiju@... (石塚圭樹 ) 1998/03/09

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

[#1637] Re: [BUG] String.dup — shugo@... (Shugo Maeda) 1998/03/10

前田です。

[#1641] implementation of super_undef (Re: [BUG] String.dup) — matz@... (Yukihiro Matsumoto) 1998/03/10

まつもと ゆきひろです

[#1647] Re: implementation of super_undef (Re: [BUG] String.dup) — shugo@... (Shugo Maeda) 1998/03/10

前田です。

[#1648] Re: implementation of super_undef (Re: [BUG] String.dup) — matz@... (Yukihiro Matsumoto) 1998/03/10

まつもと ゆきひろです

[#1654] Re: implementation of super_undef (Re: [BUG] String.dup) — keiju@... (石塚圭樹 ) 1998/03/10

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

[#1656] Re: implementation of super_undef (Re: [BUG] String.dup) — matz@... (Yukihiro Matsumoto) 1998/03/10

まつもと ゆきひろです

[#1557] IO#putc/Kernel#putc/Kernel#putchar — shugo@... (Shugo Maeda)

前田です。

28 messages 1998/03/03
[#1558] Re: IO#putc/Kernel#putc/Kernel#putchar — matz@... (Yukihiro Matsumoto) 1998/03/03

まつもと ゆきひろです

[#1569] Re: IO#putc/Kernel#putc/Kernel#putchar — shugo@... (Shugo Maeda) 1998/03/03

前田です。

[#1577] Re: IO#putc/Kernel#putc/Kernel#putchar — matz@... (Yukihiro Matsumoto) 1998/03/04

まつもと ゆきひろです

[#1579] Re: IO#putc/Kernel#putc/Kernel#putchar — shugo@... (Shugo Maeda) 1998/03/04

前田です。

[#1581] Re: IO#putc/Kernel#putc/Kernel#putchar — matz@... (Yukihiro Matsumoto) 1998/03/04

まつもと ゆきひろです

[#1582] Re: IO#putc/Kernel#putc/Kernel#putchar — shugo@... (Shugo Maeda) 1998/03/04

前田です。

[#1583] Re: IO#putc/Kernel#putc/Kernel#putchar — matz@... (Yukihiro Matsumoto) 1998/03/04

まつもと ゆきひろです

[#1587] Re: IO#putc/Kernel#putc/Kernel#putchar — shugo@... (Shugo Maeda) 1998/03/04

前田です。

[#1592] Re: IO#putc/Kernel#putc/Kernel#putchar — keiju@... (石塚圭樹 ) 1998/03/05

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

[#1657] Re: [ruby-list:7057] Re: infinity — shugo@... (Shugo Maeda)

前田です。

99 messages 1998/03/10
[#1659] Re: [ruby-list:7057] Re: infinity — keiju@... (石塚圭樹 ) 1998/03/10

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

[#1662] Re: [ruby-list:7057] Re: infinity — matz@... (Yukihiro Matsumoto) 1998/03/11

まつもと ゆきひろです

[#1680] Re: [ruby-list:7057] Re: infinity — keiju@... (石塚圭樹 ) 1998/03/11

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

[#1690] Re: [ruby-list:7057] Re: infinity — Tadayoshi Funaba <tadf@...> 1998/03/11

ふなばです。

[#1692] Re: [ruby-list:7057] Re: infinity — shugo@... (Shugo Maeda) 1998/03/11

前田です。

[#1696] Re: [ruby-list:7057] Re: infinity — Tadayoshi Funaba <tadf@...> 1998/03/11

ふなばです。

[#1698] Re: [ruby-list:7057] Re: infinity — Tadayoshi Funaba <tadf@...> 1998/03/11

ふなばです。

[#1706] argument check in Range::new — shugo@... (Shugo Maeda) 1998/03/11

前田です。

[#1715] Re: argument check in Range::new — matz@... (Yukihiro Matsumoto) 1998/03/12

まつもと ゆきひろです

[#1661] Re: infinity — shugo@... (Shugo Maeda) 1998/03/10

前田です。

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

In message <199803101536.PAA01595@soleil.localnet.or.jp>

[#1670] Re: infinity — shugo@... (Shugo Maeda) 1998/03/11

前田です。

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

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

[#1705] Re: infinity — shugo@... (Shugo Maeda) 1998/03/11

前田です。

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

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

[#1739] Re: infinity — shugo@... (Shugo Maeda) 1998/03/12

前田です。

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

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

[#1765] Re: infinity — shugo@... (Shugo Maeda) 1998/03/13

前田です。

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

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

[#1770] Re: infinity — shugo@... (Shugo Maeda) 1998/03/13

前田です。

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

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

[#1775] Re: infinity — shugo@... (Shugo Maeda) 1998/03/13

前田です。

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

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

[#1780] Re: infinity — shugo@... (Shugo Maeda) 1998/03/13

前田です。

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

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

[#1789] Re: infinity — shugo@... (Shugo Maeda) 1998/03/15

前田です。

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

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

[#1783] [Req] Comparable#min/max — keiju@... (Keiju ISHITSUKA)

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

25 messages 1998/03/14
[#1794] Re: [Req] Comparable#min/max — matz@... (Yukihiro Matsumoto) 1998/03/16

まつもと ゆきひろです

[#1798] Re: [Req] Comparable#min/max — keiju@... (石塚圭樹 ) 1998/03/16

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

[#1801] Re: [Req] Comparable#min/max — matz@... (Yukihiro Matsumoto) 1998/03/16

まつもと ゆきひろです

[#1806] Re: [Req] Comparable#min/max — keiju@... (石塚圭樹 ) 1998/03/16

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

[#1808] Re: [Req] Comparable#min/max — matz@... (Yukihiro Matsumoto) 1998/03/16

まつもと ゆきひろです

[#1809] Re: [Req] Comparable#min/max — keiju@... (石塚圭樹 ) 1998/03/16

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

[#1814] Re: [Req] Comparable#min/max — matz@... (Yukihiro Matsumoto) 1998/03/17

まつもと ゆきひろです

[#1791] Re: trap and throw problem — keiju@... (Keiju ISHITSUKA)

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

24 messages 1998/03/15
[#1796] Re: trap and throw problem — matz@... (Yukihiro Matsumoto) 1998/03/16

まつもと ゆきひろです

[#1799] Re: trap and throw problem — keiju@... (石塚圭樹 ) 1998/03/16

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

[#1800] Re: trap and throw problem — matz@... (Yukihiro Matsumoto) 1998/03/16

まつもと ゆきひろです

[#1807] Re: trap and throw problem — keiju@... (石塚圭樹 ) 1998/03/16

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

[#1823] Re: trap and throw problem — matz@... (Yukihiro Matsumoto) 1998/03/17

まつもと ゆきひろです

[#1839] Re: trap and throw problem — keiju@... (石塚圭樹 ) 1998/03/17

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

[#1840] Re: trap and throw problem — matz@... (Yukihiro Matsumoto) 1998/03/17

まつもと ゆきひろです

[#1859] experimantal release 1.1b9_04 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

30 messages 1998/03/19
[#1912] Re: experimantal release 1.1b9_04 — Tadayoshi Funaba <tadf@...> 1998/03/24

ふなばです。

[#1908] RUBYLIB and default path problem — keiju@... (Keiju ISHITSUKA)

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

19 messages 1998/03/24
[#1909] Re: RUBYLIB and default path problem — matz@... (Yukihiro Matsumoto) 1998/03/24

まつもと ゆきひろです

[#1916] Re: RUBYLIB and default path problem — keiju@... (石塚圭樹 ) 1998/03/25

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

[#1919] Re: RUBYLIB and default path problem — matz@... (Yukihiro Matsumoto) 1998/03/25

まつもと ゆきひろです

[#1922] Re: RUBYLIB and default path problem — keiju@... (石塚圭樹 ) 1998/03/25

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

[#1923] Re: RUBYLIB and default path problem — matz@... (Yukihiro Matsumoto) 1998/03/25

まつもと ゆきひろです

[#2002] [Req] Binding.new — keiju@... (Keiju ISHITSUKA)

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

29 messages 1998/03/31
[#2003] Re: [Req] Binding.new — matz@... (Yukihiro Matsumoto) 1998/03/31

まつもと ゆきひろです

[#2004] Re: [Req] Binding.new — keiju@... (石塚圭樹 ) 1998/03/31

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

[#2008] Re: [Req] Binding.new — matz@... (Yukihiro Matsumoto) 1998/04/02

まつもと ゆきひろです

[#2010] Re: [Req] Binding.new — keiju@... (石塚圭樹 ) 1998/04/02

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

[#2012] Re: [Req] Binding.new — matz@... (Yukihiro Matsumoto) 1998/04/02

まつもと ゆきひろです

[#2013] Re: [Req] Binding.new — keiju@... (石塚圭樹 ) 1998/04/02

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

[#2014] Re: [Req] Binding.new — matz@... (Yukihiro Matsumoto) 1998/04/02

まつもと ゆきひろです

[#2015] Re: [Req] Binding.new — keiju@... (石塚圭樹 ) 1998/04/02

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

[#2016] Re: [Req] Binding.new — matz@... (Yukihiro Matsumoto) 1998/04/02

まつもと ゆきひろです

[#2017] Re: [Req] Binding.new — matz@... (Yukihiro Matsumoto) 1998/04/02

まつもと ゆきひろです

[#2020] Re: [Req] Binding.new — keiju@... (石塚圭樹 ) 1998/04/02

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

[#2021] Re: [Req] Binding.new — matz@... (Yukihiro Matsumoto) 1998/04/02

まつもと ゆきひろです

[#2038] Re: [Req] Binding.new — keiju@... (石塚圭樹 ) 1998/04/03

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

[#2039] Re: [Req] Binding.new — matz@... (Yukihiro Matsumoto) 1998/04/03

まつもと ゆきひろです

[ruby-dev:1718] new coerce [Re: coerce]

From: keiju@... (Keiju ISHITSUKA)
Date: 1998-03-12 05:43:13 UTC
List: ruby-dev #1718
けいじゅ@日本ラショナルソフトウェアです.

新coerce案を検討します.

In [ruby-list :07032 ] the message: "[ruby-list:7032] Re: coerce ", on
Mar/10 02:18(JST) Keiju ISHITSUKA writes:

>>(2) 本当は Numericクラスあたりでやらしたいことを
>>  わざわざ Scalarクラスのオブジェクトを作って
>>  それにやらしている。
>>
>>  ==> 適用すべきメソッドを coerce の返値で教えて
>>      やってはどうか

(中略)

>こうやって考えると, この方法は, 簡単な割に結構強力でかつ, 過去との互換
>性も大体あるといえます(引数が1つ増えるだけ).
>
>というわけで, coerceの
>
>  self.coerce(other, op) -> (other', self', op')
>
>への仕様変更を私も推したいと思います(^^;;; 
>
>私はなっとくしたのですが, 松本氏が納得しないことには意味がなくて... い
>かがでしょう? >> matz

一言でいいますと, 新coerce[新案1]はなかなか良いアイディアだと思います.

1. MatrixにおけるScalarの様な間接クラスは必要なくなる(と思う). 
2. 間接クラスに変わる方法は, ダブルディスパッチに近い部分があり分かり
   やすくなる(と思う). 

問題もあります.

3. coerceが大きくなる. 

   でも, それは元々複雑な場合で, 現coerceでScalarの様な間接クラスを導
   入しなくてはいけない場合だけだと思います. ほとんどの場合第3引数は無
   視できます.

4. このままでは, coerceは良いが, coerceを呼んだ側が面倒.

この問題を豊福@パパイヤさんの例を引いて検討しますと:

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

というようなコードを書かなくてなならなくて, 常に演算子を考えなくてはな
らないのが面倒ですよね.

そこで, その問題を解消できる[新案2]を提出します.

[新案2]
呼出側では直接coerceを呼ぶのではなくて演算を代わりにやってくれる以下の
ような別メソッドを導入し:

class Object
  def delegate_op(other, op)
    x, y, op2 = coerce(other, op)
    if op2
      x.send(op2, y)
    else
      x.send(op, y)
    end
  end
end

と定義して,

class Fixnum
  def *(other)
    case other
    ...
    else
      other.delegate_op(self, :*)
    end
  end
end

と呼び出せるようにするのはいかがでしょう?

そうすると, 呼出側も現coerceよりも簡単になりますし, 第一間違いが少なく
なる(^^;;;

この案でちょっと気になるのは, elegate_opがObject/Kernelにないと困るっ
てことですかね...

[新案3]
もう1つの案は, coerceをやめてdelegete_opだけにしてこっちを再定義するよ
うにするというのもです.

そうすると, 以下のようなものが:

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

このように, returnしていたものが

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

のように直接呼び出せるようになります.

でも, Matrixみたいな場合はそうでも, 以下のような単純な場合は

class Complex
  def coerce(other, op)
    if Complex.generic?(other)
      return Complex.new(other), self
    else
      super
    end
  end
end

で済むのに

class Complex
  def coerce(other, op)
    if Complex.generic?(other)
      Complex.new(other).send(op, self)
    else
      super
    end
  end
end

と書かなくてはならなくなって, かえって面倒ですね...

というわけで[新案2]ぐらいが妥当かと思うのですが, いかがでしょう?

[新案2]では,
1. 現coerceよりも若干呼出側が簡単になる.
2. coerceの記述は, 簡単な場合は昔とほとんど同じ(引数が増えるだけ).
3. 複雑な場合は, 間接的なクラスが必要なくなり, 記述は楽になる.

問題は, (特に呼出側において)過去との互換性がない. というのがありますが, 
[新案1]でもそれは代わりません.

互換性については, これを使っている人はruby内部と私が作ったモジュールだ
けだと思いますので(多分ですが(^^;;;), 手間はかかりますが互換性に関して
はあまり気にしなくて良いと思います.

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

In This Thread

Prev Next