[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

undef_method cutting off subclass's method lookup?

T. Onoma

10/31/2004 7:51:00 PM


class Numeric
def succ
self + 1
end
end

class Integer
undef_method( :succ )
end

2.class #=> Fixnum
2.succ
NoMethodError: undefined method `succ' for 1:Fixnum
from (irb):10


Shouldn't it be able to find #succ in the ancestor?

T.


2 Answers

dblack

10/31/2004 8:02:00 PM

0

T. Onoma

10/31/2004 9:13:00 PM

0

On Sunday 31 October 2004 03:02 pm, David A. Black wrote:
| Hi --
|
| On Mon, 1 Nov 2004, trans. (T. Onoma) wrote:
| > class Numeric
| > def succ
| > self + 1
| > end
| > end
| >
| > class Integer
| > undef_method( :succ )
| > end
| >
| > 2.class #=> Fixnum
| > 2.succ
| > NoMethodError: undefined method `succ' for 1:Fixnum
| > from (irb):10
| >
| >
| > Shouldn't it be able to find #succ in the ancestor?
|
| From 'ri undef_method':
|
| ----------------------------------------------------
| Module#undef_method
| undef_method(symbol) => self
| ------------------------------------------------------------------------
| Prevents the current class from responding to calls to the named
| method. Contrast this with +remove_method+, which deletes the
| method from the particular class; Ruby will still search
| superclasses and mixed-in modules for a possible receiver.

Sigh. So I should use #remove_method then. Okay. That's bit me again. Yes, I
know this. But I use it rarely, and when I do I keep getting confused about
which is which. The above is terribly written. The statement after the
semicolon doesn't have a clear reference. Is the semicolon supposed to clue
me in? That's weak, and one wonders which of the two will "still search".
Moreover, it says _current class_, not _current class and all subclasses
thereof_, so that seems misleading too.

Anyway, thanks David!
T.