RE: [Foil-users] generic methods
Status: Beta
Brought to you by:
rhickey
From: Rich H. <ri...@ri...> - 2005-06-17 21:52:55
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 >This wouldn't work for me. I want to and have written code that >is general, I mean where the type of the object is not known or could change. Ok. Are the functions you are calling polymorphic in Java - i.e. are they members of base classes or interfaces? Or are you just rolling your own name-based polymorphism? If the former, you can (and should, given your objectives) just use the most general class in the function call. E.g. if SetText is a method of Control, and Control is a base class/interface of Combo, and you want to write code not specific to Combo, you can simply say: (control.settext my-combo "foo") You don't need to make the call in the specific class of the object (i.e. combo.settext)- it will be resolved by the Java virtual function mechanism to the right SetText for the actual type of the object (Combo in this case). If you want name-based polymorphism I can't help you. The bottom line is if the code emitted by your macro doesn't contain Foil-generated symbols, then Clojure won't generate Java calls for you. - -----Original Message----- From: foi...@li... [mailto:foi...@li...] On Behalf Of Francis Leboutte Sent: Friday, June 17, 2005 9:32 AM To: foi...@li... Subject: RE: [Foil-users] generic methods At 17/06/2005 15:33, Rich Hickey wrote: >If you ever intend to use Clojure, Very probably. >I would definitely recommend against >this. > >Performance isn't really the issue - Foil performance is dominated by >the socket interaction and almost nothing you do on the Lisp side matters. > >The problem is that you are removing the symbols that Clojure will need >to compile the code. It leverages the reflection info connected to the >symbols combo.settext, button.settext etc in order to generate typed >reflection-free calls when compiled. Clojure has no provisions for reflection-based calls. I don't really understand. Do you meanI shouldn't use symbols like settext or setfont to define functions? >I hope you are using an editor with symbol completion, of course, without symbol completion, it would be too hard :-) At present time I have access to 17262 symbols, most of them in the |org.eclipse.swt*| and |com.nwoods.jgo| packages. I also use a lot a specific apropos function that looks only in the java packages. >which should make >this less of a bother, but if it's still a pain I recommend a macro that >does something like > >(with-members-of (swt-control combo.) > (.settext "foo") > (bar baz) > (.somethingelse x y z)) > >which expands into: > >(progn > (combo.settext swt-control "foo") > (bar baz) > (combo.somethingelse swt-control x y z)) This wouldn't work for me. I want to and have written code that is general, I mean where the type of the object is not known or could change. By the way, in the same vein, I have also defined apply-j-method that doesn't require to define a new function. Examples: (apply-j-method "SETFOCUS" control) (apply-j-method "SETDEFAULTBUTTON" shell button) I hope I could use this and Clojure. Francis >I've been meaning to add something like with-members-of to Foil, but haven't >yet had the time. > >I have to say I consider the "complete-ability" of Foil symbols to be an >important feature, vs. say the Javadot notation of JScheme et al. > > >-----Original Message----- >From: foi...@li... >[mailto:foi...@li...] On Behalf Of Francis >Leboutte >Sent: Friday, June 17, 2005 3:08 AM >To: foi...@li... >Subject: [Foil-users] generic methods > >Hello > >In order to be able to write >(settext swt-control "hello") > >instead of >(combo.settext swt-control "hello") >(button.settext swt-control "hello") >... > >I have defined a macro to define "generic java methods" like this: > >(def-java-generic "SETTEXT") > >This call expands in: > >(progn > (export 'settext) > (defun settext (object &rest rest) > (ensure-typed-ref object) > (if object > (let* ((fun-name (concatenate 'string (symbol-name (type-of >object)) "SETTEXT")) > (fun (find-symbol fun-name))) > (unless (and fun (fboundp fun)) > (error "can't find function definition of settext for ~s >object" object)) > (apply fun object rest)) > (error "settext doesn't accept nil as first argument")))) > > >Are they potential pitfalls in this? >Performance maybe? Instead of ensure-typed-ref, is there some >other function to use that would be less costly (just the class >name is needed, not the conversion of the fref to this class). > >Francis > > > >------------------------------------------------------- >SF.Net email is sponsored by: Discover Easy Linux Migration Strategies >from IBM. Find simple to follow Roadmaps, straightforward articles, >informative Webcasts and more! Get everything you need to get up to >speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click >_______________________________________________ >Foil-users mailing list >Foi...@li... >https://lists.sourceforge.net/lists/listinfo/foil-users > > > >------------------------------------------------------- >SF.Net email is sponsored by: Discover Easy Linux Migration Strategies >from IBM. Find simple to follow Roadmaps, straightforward articles, >informative Webcasts and more! Get everything you need to get up to >speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click >_______________________________________________ >Foil-users mailing list >Foi...@li... >https://lists.sourceforge.net/lists/listinfo/foil-users - ------------------------------------------------------- SF.Net email is sponsored by: Discover Easy Linux Migration Strategies from IBM. Find simple to follow Roadmaps, straightforward articles, informative Webcasts and more! Get everything you need to get up to speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click _______________________________________________ Foil-users mailing list Foi...@li... https://lists.sourceforge.net/lists/listinfo/foil-users -----BEGIN PGP SIGNATURE----- Version: PGP Desktop 9.0.1 (Build 2185) Comment: Secured with PGP iQEVAwUBQrNGMIQJlEjCeZ9CAQi95wf/QWfhfqM0A7OvGQYSO3DUlIS2BExmBQ82 JY6tt3Xcb3G4qgMcMMBceTpJt7s6KNAlSC8F2vkID9zzj/EPioOYDRuftEZs0sY2 01S6ktjFyzbJgOwW8FxGAnt0/4mOto42/j53j5CcGVsdNcwGHcPTcYSzCXb7DHt8 4T9Ds0s2gFT+uwM6x5zUL+Vk5V4nNUBYQHaWg90U6ojZ/Qri6LC/cGt+btwQm71p 5XDIje4uSsntTsUUGKOatiEllkHUBrcL+XzaBmb/RmKjAaEFCjLhWrtLBX85qECv d7tzEAgr5DjNbTnWb3SJYYGEhoEfgLLgiXbKlVoKXMM7emmdtRSdxw== =pkrw -----END PGP SIGNATURE----- |