[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Re: Ruby/Python Continuations: Turning a block callback into a read()-method ?

Kaspar Schiess

2/13/2006 8:23:00 AM

> @ftp.retrbinary("RETR "+@path,4) do |block|
> print "CALLBACK ",block,"\n"
> callcc{|@iter| @flag=true}
> if @flag
> @flag=false
> return block
> end
> end

Hi Robert,

I guess you are running into some threading/synching of Net::FTP here.
Simply put, the pattern works, although it is harder to manage properly
than one might think:

# A small cc demo on the topic of IO. Of course there is
# File#readline doing the same job as this fabulously, this
# is just for demonstration.
#
class CCFile
def initialize
@file = File.open(__FILE__, 'r+')
@cc = nil
end

def read
@cc.call if @cc && !@file.eof?
@file.each do |line|
puts line
callcc do |cc|
@cc = cc
return line
end
end
end
end

f = CCFile.new
2.times do
f.read
end
# let the files close themselves

You have probably remarked that the @flag variable isn't strictly
neccessary. Is that something like what you are trying to do ?

Also note the interaction with the loop. This is why cc's are not widely
used...

Keep going, you are on the right track. I can't comment on your Python,
since I am a total n00b in Python.

best whishes,
k
software manufaktur - rubylab.newfoundedpower.com