[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Classes with member co-routines.
- From: Javier Guerra <javier@...>
- Date: Thu, 2 Dec 2004 12:09:46 -0500
On Thursday 02 December 2004 11:32 am, Dan Laufer wrote:
> Whoops.
>
> It was actually all down to me getting in a tangle over :'s and .'s.
only that? i was thinking that maybe the problem is with the unrolling of the
':' . in other words:
Task1Co = coroutine.create(Task1:tick());
becomes
Task1Co = coroutine.create(Task1.tick(Task1));
but coroutine.create expects a function, not the result of tick(Task1)
one way would be to add a new method 'GetTask'
function TestTask:GetTask ()
self.task = self.task or coroutine.wrap (self.tick)
return self.task
end
then, you could use like this:
Task1 = TestTask:new();
Task1.taskName = "Task1";
Task1Co = Task1:GetTask ();
-- somewhere in the loop
Task1Co (Task1Co);
-- or maybe,
Task1:GetTask() (Task1Co)
there are better ways to do it... but 'tick' would be better as the name of an
interface function, not the work function. for example:
function TestTask:work()
while 1 do
self.internalVal = self.internalVal + 1;
print("Internal val of TestTask "..self.taskName..
" : "..self.internalVal);
coroutine.yield();
end
end
funtcion TestTask:tick ()
self.co = self.co or croutine.create (TestTask.work)
self.co (self)
end
-- using it:
Task1 = TestTask:new();
Task1.taskName = "Task1";
-- somewhere in the loop
Task1:tick()
--
Javier
Attachment:
pgp7KARjMSL8L.pgp
Description: PGP signature