Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
Problems with alias_method
Pratik
3/8/2007 7:39:00 PM
Hi Guys,
I'm trying to alias_method in a bit different way. Here's what I'm
trying to do :
http://pastie.cabo...
Any help would be great.
Thanks for your time,
Pratik
1 Answer
Jano Svitok
3/8/2007 10:23:00 PM
0
On 3/8/07, Pratik <pratiknaik@gmail.com> wrote:
> Hi Guys,
>
> I'm trying to alias_method in a bit different way. Here's what I'm
> trying to do :
http://pastie.cabo...
>
> Any help would be great.
>
> Thanks for your time,
> Pratik
Hi,
if I understand correctly, the problem you want to solve is to move
repeat_every before the method definition. You are getting
NoMethorError now, so you've put the line after the method def. This
error is expected, as the repeat_every is called before the
interpreter comes to def...
So, what are you looking for is kind of lazy evaluation. You need to
postpone your code until the method is defined. One way to do this is
to use method_added callback. Just set a flag that you are wainting
for a method definition and then, when the method is defined, do your
stuff. Notice that you get the name of the method as an argument, so
this can be easily extended to handle any method.
module Hello
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def method_added(method_name)
@waiting ||= false
return unless @waiting
@waiting = false
method = <<-METHOD
define_method(:main_with_schedule) do |*args|
while true
puts "looping"
main_without_schedule(*args)
sleep #{@sleep_time}
end
end
alias_method :main_without_schedule, :main
alias_method :main, :main_with_schedule
METHOD
self.instance_eval(method)
end
def repeat_every(time = 5)
@sleep_time = time
@waiting = true
end
end
end
class Redworld
include Hello
# I want to have repeat_every before main() method. But it gives
method not found error.
repeat_every 2 #formerly commented out
def main
puts "Hello World"
end
# here was: repeat_every 5
end
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
Problems with alias_method
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password