|
|
continuations and clone problem
This class should convert internal-iterators to external-iterators.
But how do I clone them?
Any advice are deeply appreciated.
--
Simon Strandgaard
server> ruby a.rb
a.rb:28:in `next': undefined method `call' for false:FalseClass (NoMethodError)
from a.rb:28:in `callcc'
from a.rb:28:in `next'
from a.rb:43
server> expand -t2 a.rb
class Object
def deep_clone
Marshal::load(Marshal.dump(self))
end
end
class IteratorContinuation
def initialize(instance, symbol)
@instance = instance
@symbol = symbol
first
end
def first
@value = nil
@resume_where = false
@return_where = Proc.new{}
@instance.method(@symbol).call {|i|
@value = i
callcc{|@resume_where|
@return_where.call
return
}
}
@resume_where = false
@return_where.call
end
def next
callcc{|@return_where| @resume_where.call }
end
def is_done?
@resume_where == false
end
def current
@value
end
end
i1 = IteratorContinuation.new("hello world", :each_byte)
i1.next
i1.next
i1.next
i2 = i1.clone # deep_clone not possible
i2.next
p i1.current
p i2.current
server>
|
|
0
|
|
|
|
Reply
|
neoneye (532)
|
11/21/2003 10:11:58 AM |
|
>>>>> "S" == Simon Strandgaard <neoneye@adslhome.dk> writes:
Try this (not tested)
S> class IteratorContinuation
def marshal_dump
[@instance, @symbol]
end
def marshal_load(arr)
initialize(*arr)
end
S> end
S> i1 = IteratorContinuation.new("hello world", :each_byte)
S> i1.next
S> i1.next
S> i1.next
S> i2 = i1.clone # deep_clone not possible
i2 = i1.deep_clone
S> i2.next
S> p i1.current
S> p i2.current
Guy Decoux
|
|
0
|
|
|
|
Reply
|
decoux (1351)
|
11/21/2003 10:53:47 AM
|
|
On Fri, 21 Nov 2003 19:53:47 +0900, ts wrote:
>
> Try this (not tested)
>
> def marshal_dump
> def marshal_load(arr)
Above partially solves it. However adding a position count, then it fully
works. Thanks.
Cloning continuations seems not to be possible ?
irb(main):001:0> x = false
=> false
irb(main):002:0> callcc{|x| }
=> nil
irb(main):003:0> p x
#<Continuation:0x81cba80>
=> nil
irb(main):004:0> y = x.clone
NoMethodError: allocator undefined for Continuation
from (irb):4:in `clone'
from (irb):4
Therefore when doing cloning, I must iterate until @position are reached.
Any idea if this skip-until-position code can be reduced?
--
Simon Strandgaard
server> ruby a.rb
"l"
"o"
server> expand -t2 a.rb
class Object
def deep_clone
Marshal::load(Marshal.dump(self))
end
end
class IteratorContinuation
def initialize(instance, symbol, position=nil)
@instance = instance
@symbol = symbol
@position = position || 0
first
@position.times { self.next } # TODO: can this be avoided ?
end
def first
@value = nil
@resume_where = false
@return_where = Proc.new{}
@instance.method(@symbol).call {|i|
@value = i
callcc{|@resume_where|
@return_where.call
return
}
}
@resume_where = false
@return_where.call
end
def next
@position += 1
callcc{|@return_where| @resume_where.call }
end
def is_done?
@resume_where == false
end
def current
@value
end
def clone
self.class.new(@instance, @symbol, @position)
end
def marshal_dump
[@instance, @symbol, @position]
end
def marshal_load(arr)
initialize(*arr)
end
end
i1 = IteratorContinuation.new("hello world", :each_byte)
i1.next
i1.next
i1.next
i2 = i1.clone
#i2 = i1.deep_clone
i2.next
p i1.current.chr #=> "l"
p i2.current.chr #=> "o"
server>
|
|
0
|
|
|
|
Reply
|
neoneye (532)
|
11/21/2003 11:28:00 AM
|
|
|
2 Replies
32 Views
(page loaded in 1.181 seconds)
Similiar Articles: IOLib Tutorial - comp.lang.lisp... mentioned there is: git clone ... In the incorrect code, there is a distinct continuation you ... It leaves unspecified if a problem happened during ... multithreading in Asm - comp.lang.asm.x86It seems to be sys_clone that does the business, but ... stack, but manipulating that will lead to problems. ... control flow is driven by hoping between continuations ... input & output in assembly - comp.lang.asm.x86A failing of Win32 or not, it is a problem when a ... an AMD Duron and so I write assembly for an x86 clone. ... Assembly language | bOtskOOl This tutorial is in continuation ... Transparency of BMP image pixels - comp.graphics.api.opengl ...I understand that the problem is that I can't set the ... I just have a personnal computer (IBM clone) running ... Sounds quite interesting - Good continuation ! Tsch=FCss. Continuations in Java... fact that you typically make a deep clone of the actual data at the next continuation. ... has been trying to use that to add continuations to DWR and has had problems ... Use continuations to develop complex Web applicationsThe biggest problem with using continuations for Web development is that not many of the ... used to provide GUI programs with browser-like capabilities of cloning ... 6/29/2012 7:33:30 AM
|
|
|
|
|
|
|
|
|