It could be handy to have this shortcut implemented as you suggest.
Solving ambiguities may be done through an explicit proxy or with some
meta data to point to the proper
method match.

Luc


On Mon, 2009-08-31 at 19:34 -0700, Timothy Pratley wrote:

> If I understand correctly it could be implemented with the following
> change to Reflector.java:
> static Object boxArg(Class paramType, Object arg){
>         if(paramType.isInterface() && arg instanceof IFn)
>                 return makeAProxy( findMethodMatch( paramType, arg ),
> arg );
> 
> Which would then allow us to instead of using proxy:
> > (.addMouseListener
> >   (proxy [MouseAdapter] []
> >     (mouseClicked [event]
> >         (if (= 2 (.getClickCount event))
> >                 (display-details (.locationToIndex (.getPoint event)))))))
> 
> Write it using a function which will discover what interface/method to
> create a proxy for:
> (.addMouseListener
>   #(if (= 2 (.getClickCount %))
>      (display-details (-> % .getPoint .locationToIndex)))
>   something)
> 
> The alternative solution for doing that if we are willing to create a
> macro or helper function:
> (defmacro add-action-listener
>   "Attaches an ActionListener to a Component"
>   [#^java.awt.Component obj, evt & body]
>   `(.addActionListener
>      ~obj (proxy [java.awt.event.ActionListener] []
>             (actionPerformed [~evt] ~...@body))))
> 
> (add-action-listener something evt
>   (if (= 2 (.getClickCount evt))
>     (display-details (-> evt .getPoint .locationToIndex))))
> 
> The only difference being of course that you'd need a separate helper
> for all the different interfaces want to proxy, and would have to
> explicitly choose which interface the function implements. I don't
> have enough experience to know of how many anonymous single function
> interface proxies are useful.
> 
> 
> Regards,
> Tim.
> 
> > 
> 

Luc Préfontaine

Armageddon was yesterday, today we have a real problem...

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to