けいじゅ@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 <----