[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Re: [QUIZ] Negative Sleep (#87

Alex Nedelcu

7/19/2006 1:42:00 AM

Hi,

I am a beginner, so please forgive my newbish skills :)
I just discovered RubyQuiz, I think it is a great idea, and I thought
about submitting my own solution.
I haven't given an alternative interpretation of sleep, I just used the
first definition I read there.

Maybe you could tell what can I do to make it more ruby-ish ? :)


class Computation
def initialize(&computation)
@comp = []
@comp << computation
@rev = 0
end

def run
@comp.each do |runnable|
if runnable.kind_of? Computation
runnable.run
else
runnable.call
end
end
end

def +(ref)
t = self
ref.instance_eval { add_myself(t) }
self
end

protected
def add_myself(target)
ref = self
target.instance_eval do
if @rev == 0
@comp << ref
else
@comp.unshift ref
@rev -= 1
end
end
end
end

class Sleep < Computation
alias old_init initialize
alias old_add_myself add_myself
attr_reader :seconds

def initialize(seconds)
old_init do sleep(seconds > 0 ? seconds : -seconds); end
@seconds = seconds
end

protected
def add_myself(target)
ref = self
target.instance_eval do
@rev = 2 if ref.kind_of? Sleep and ref.seconds < 0
end
old_add_myself(target)
end
end