Re: [Hecl-devel] "class" concept
Brought to you by:
davidw
From: David W. <da...@de...> - 2009-02-18 23:24:32
|
> Example (kind of stupid :-) ) will probably be best. I want to enable the users to write handlers for some events. Since my midlet is GPS-oriented, one of the events will be > "onLocationUpdated". Now let's say a user wants to see average speed during a time period. I thought of letting him write a handler that may look like > var sum-spd 0 > var counter 0 > proc onLocationUpdated {} { > set counter [+ 1 counter] > set sum [+ $sum-spd ${spd}] } > } > proc onPaint {} { > print "avg speed is [/ $sum-spd $counter]" > } > > Please note that 'var' and 'print' are custom commands, variables like 'spd' are set in given instance of Interp by the midlet before handler invocation. The handler is invoked by eval'ing simple scripts like just > onLocationUpdated You could create the callback code like so, to pass it a variable, which is a bit cleaner than magically creating it: Vector v = new Vector(); v.addElement(new Thing("onLocationUpdated")); v.addElement(IntThing.create(spd)); interp.evalAsync(ListThing.create(v)); Then: proc onLocationUpdated {spd} { global counter global sum-spd incr $counter set sum [+ $sum-spd $spd] } Or something like that. Beautiful programming? Not particularly, but it works well enough, and is a good way of keeping Hecl small. > using the same instance of Interp (I also tried direct invocation of corresponding Proc.cmdCode(...)). > I have tested this in a simple j2se application and seemed to work just fine. > As far as the threading is concerned, having each instance of Interp running in a thread > is not necessary for such usage, and would bring sync issues I guess ("has the handler finished event processing already?"). You can evaluate things synchronously, too. More than anything, if you hack at one of the key bits of Hecl, it might make it hard to sync up any changes we make with any changes you make. Another issue is - if you have multiple interps, how are you sharing variables between them? It's not a bad idea, but is a little bit of 'putting a round peg in a square hole'.... Interp isn't quite the data structure to be using. I guess you could use one interp per callback, but my thinking is that it would isolate one from another a bit too much. Speaking of OO, as a survey, what do people really want? * Encapsulation? Just data and methods all wrapped up nicely in order to keep code clean? * Inheritance? * Other? Hecl isn't the right place to do anything really fancy - unless of course it can be done in a small amount of code. -- David N. Welton http://www.welton.it/davidw/ http://www.dedasys.com/ Sent from: Vomp 7 Austria. |