T. Onoma
10/31/2004 9:13:00 PM
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.