[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Why is this cause an infinite loop?

Trans

7/17/2008 2:49:00 PM

Why is this cause an infinite loop?

class X
def m; "m"; end
end

class Y < X
def self.method_added(sym)
alias_method("__#{sym}", sym)
remove_method(sym)
end
end

class Y
def m; m; end
end

Y.new.__m

T.

3 Answers

Pit Capitain

7/17/2008 2:56:00 PM

0

2008/7/17 Trans <transfire@gmail.com>:
> Why is this cause an infinite loop?
>
> class X
> def m; "m"; end
> end
>
> class Y < X
> def self.method_added(sym)

p sym

> alias_method("__#{sym}", sym)
> remove_method(sym)
> end
> end
>
> class Y
> def m; m; end
> end
>
> Y.new.__m

Tom, see above. Creating an alias triggers method_added.

Regards,
Pit

Trans

7/17/2008 5:23:00 PM

0



On Jul 17, 10:55=A0am, "Pit Capitain" <pit.capit...@gmail.com> wrote:
> 2008/7/17 Trans <transf...@gmail.com>:
>
> > Why is this cause an infinite loop?
>
> > =A0class X
> > =A0 =A0def m; "m"; end
> > =A0end
>
> > =A0class Y < X
> > =A0 =A0def self.method_added(sym)
>
> =A0 =A0 =A0 =A0p sym
>
> > =A0 =A0 =A0alias_method("__#{sym}", sym)
> > =A0 =A0 =A0remove_method(sym)
> > =A0 =A0end
> > =A0end
>
> > =A0class Y
> > =A0 =A0def m; m; end
> > =A0end
>
> > =A0Y.new.__m
>
> Tom, see above. Creating an alias triggers method_added.

Dooh!

Thanks, Pit.

T.

Robert Dober

7/17/2008 5:31:00 PM

0

On Thu, Jul 17, 2008 at 7:23 PM, Trans <transfire@gmail.com> wrote:
>
>
> On Jul 17, 10:55 am, "Pit Capitain" <pit.capit...@gmail.com> wrote:
>> 2008/7/17 Trans <transf...@gmail.com>:
>>
>> > class Y < X
>> > def self.method_added(sym)
return if /^__/ === sym.to_s

But you probably figured that out by yourself ;).

Cheers
Robert


--
http://ruby-smalltalk.blo...

---
AALST (n.) One who changes his name to be further to the front
D.Adams; The Meaning of LIFF