Huzzah. I have been waiting for this bug for a while and I thank you
for making it start to breath.
-Tom
On 7/1/07, Nick Sieger <[EMAIL PROTECTED]> wrote:
I just committed a patch I had lingering in JRUBY-991, plus some
enhancements. We can back out the change if it causes problems or
proves to be too controversial. The basic theme is auto-coercion of
vanilla Ruby objects to Java interface proxies when the ruby object
ends up in the same argument position as a Java interface type when
passed to a Java method invocation. Again, the example given in the
issue:
---
include Java
filter = Object.new
def filter.accept(file, str)
!!(str =~ /jar/)
end
file = java.io.File.new("lib")
file.list(filter).each {|f| puts f}
---
I took this a step further and applied some further magic for procs,
so that if a Ruby proc gets passed to a Java method, it will have a
custom method_missing injected to allow the proc to be called whenever
an interface method is invoked. This shortens the example above to
---
include Java
file = java.io.File.new("lib")
file.list(proc {|file,str| !!(str =~ /jar/) }).each {|f| puts f}
---
Furthermore, I added code to allow blocks to be passed to Java method
invocations. They will get converted to procs and will behave similar
to the previous example. So, ever so slightly shorter:
---
include Java
file = java.io.File.new("lib")
file.list {|file,str| !!(str =~ /jar/) }.each {|f| puts f}
---
So, the holy grail of Ruby closure integration with Java method
invocation is nearly achieved. Let me know what you think.
/Nick
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email
--
Blog: http://www.bloglines.com/blog/ThomasEEnebo
Email: [EMAIL PROTECTED] , [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email