[#1058] ruby 0.99.3-961119 available — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです.

19 messages 1996/11/19
[#1059] segm fault (Re ruby 0.99.3-961119 available) — sinara@... 1996/11/19

原です。

[ruby-list:1078] bug report (>>)

From: keiju@... (Keiju ISHITSUKA)
Date: 1996-11-22 08:18:12 UTC
List: ruby-list #1078
けいじゅ@SHLジャパンです. 

最近外に出る機会が多くて...

それはともかく, 久々のバグレポートとトラブルです.

[1] >>

4 >> 32

の答が 4 になります. 本当は 0 であるべきでは??

[2] ruby-mode.el (alias div /)

ruby-mode.elで 

  alias div /

があるとインデントが狂います.

[3] Fixnum.div(Bignum)

状況がいささか複雑なのですが... バグというかトラブルっています. ちょっ
と助けて下さい.

以下のソースを見て下さい:

--ここから--
class Fixnum
  alias div /;
  def rdiv(foo)
    "A"
  end
end

class Bignum
  
  alias div /;
  
  def rdiv(foo)
    "B"
  end
end

class Foo
  def foo
    print 0.div(100000)
    print 0.div(100000000000000000000000)
    print 1000000000000.div(100000000000000000000000)
  end
end

class Fixnum
  alias / rdiv;
end

class Bignum
  alias / rdiv;
end

$\ ="\n"
print 10.div(2)
print 10.div(10000000000000000)
print 1000000000000.div(10000000000000000)

f = Foo.new
f.foo
--ここまで--

これを実行すると::

5
B
0
0
B
0

となります.

aliasのていぎからいって, 答としては,

5
0
0
0
0
0

となるべきだと思うのですが, どうなんでしょうか??

``B''が出るというのは, rdivが呼ばれているので... 

Fixnum->Bignumへのcoerceが起こる時だけ問題があるようです.

背景:
何をやっているかというと, 今のrubyは  

  1/2 -> 0

となりますね. そうでなくて

  1/2 -> (1/2)Rational

となるようにもできるモジュールを作っていたのです. で, ある条件の時に無
限ループに陥ってしまうのでおかしいと思って調べていたのでした.

__
.........................................石塚 圭樹@SHLジャパン(株)...
------------>アドレス変わりました!! e-mail: keiju@shljapan.co.jp <----

In This Thread

Prev Next