Bug #601

an instance of Bignum can have singleton methods

Added by Yuki Sonoda over 3 years ago. Updated 10 months ago.

[ruby-dev:36569]
Status:Closed Start date:09/25/2008
Priority:Normal Due date:
Assignee:Yukihiro Matsumoto % Done:

100%

Category:core
Target version:1.9.1 Release Candidate
ruby -v:

Description

Bignumのインスタンスが特異メソッドを持てるようです。

 $ ruby19 -e 'x = (1 << 64); begin; def x.foo; p 1; end; rescue; end; x.foo'
   #=> 1
(by mameさん)

現在の「Fixnumに対する一貫性 + どうせ誰も使わない」という設計意図からすれば特異クラスを作ろうとする時点でTypeErrorになるべきではないでしょうか。

Related issues

related to ruby-trunk - Feature #3222: Can bignums have singleton class & methods? Assigned 04/30/2010

Associated revisions

Revision 19835
Added by Yukihiro Matsumoto over 3 years ago

* numeric.c (num_sadded): remove newly defined singleton method that should not exist after exception handling. [ruby-dev:36569]

History

Updated by Koichi Sasada over 3 years ago

  • Assignee set to Yukihiro Matsumoto

Updated by Yuki Sonoda over 3 years ago

  • Target version set to 1.9.1 Release Candidate

Updated by Yukihiro Matsumoto over 3 years ago

まつもと ゆきひろです

In message "Re: [ruby-dev:36569] [Bug #601] an instance of Bignum can have singleton methods"
    on Thu, 25 Sep 2008 22:10:30 +0900, Yuki Sonoda <redmine@ruby-lang.org> writes:

|Bignumのインスタンスが特異メソッドを持てるようです。

一応、例外が出るんですけど。

| $ ruby19 -e 'x = (1 << 64); begin; def x.foo; p 1; end; rescue; end; x.foo'
|   #=> 1
|(by mameさん)

このケースではわざわざ補足してますからねえ。

|現在の「Fixnumに対する一貫性 + どうせ誰も使わない」という設計意図からすれば特異クラスを作ろうとする時点でTypeErrorになるべきではないでしょうか。

いちいち、特異クラスを作る時点でNumericのサブクラスかどうか
チェックするのはコストが増加するのであまりうれしくないので、
singleton_method_addedの中で定義されたメソッドを削除すること
にします。もちろん、singleton_method_addedをundefすれば定義
できるようになってしまうわけですが、そこまでは面倒みきれない
と思います。

Updated by Yukihiro Matsumoto over 3 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100
Applied in changeset r19835.

Also available in: Atom PDF