I think most of the people on this list have worked with JRuby.
Here's the thing. If you're programming in JRuby, you're still programming
in Ruby. So you need to use Ruby syntax, not Java syntax. Even though JRuby
works on top of the JVM, it's still an implementation of the Ruby language,
and you need to use Ruby notation.
That means: curly braces are for Hashes, square brackets are for Arrays.
array = [1, 2, 3, 4]
Now for a two-dimensional array (or matrix) you still need to use the Ruby
syntax:
matrix = [ [ 1.1, 1.2, 1.3, 1.4 ], [ 2.1, 2.2, 2.3, 2.4 ], [ 3.1, 3.2, 3.3,
3.4 ] ]
Now, this will give you a Ruby Array, not a Java Array so you have to do
some manipulation to convert this into a Java Array. Since Ruby is
dynamically-typed, you need to tell JRuby what Java type to convert this
Array to, so you need to do is use the to_java(class) method:
matrix = [ [ 1.1, 1.2, 1.3, 1.4 ], [ 2.1, 2.2, 2.3, 2.4 ], [ 3.1, 3.2, 3.3,
3.4 ] ].to_java
The problem with this is that you'lll get an Array of Object and not an
Array of Arrays of doubles. You need to convert each internal Array
separately to an Array of doubles:
matrix = [ [ 1.1, 1.2, 1.3, 1.4 ].to_java(Java::double), [ 2.1, 2.2, 2.3,
2.4 ].to_java(Java::double), [ 3.1, 3.2, 3.3, 3.4
].to_java(Java::double) ].to_java
While that takes care of the internal arrays, the result of this expression
is STILL an Array of Objects, not an Array of Arrays.
Which brings us to the question (which one of the JRuby gurus will hopefully
answer), how do we specify an Array as a parameter in to_java?
BTW, the case of String is special. JRuby does some internal magic to
convert Ruby Strings to Java Strings, but that's just JRuby doing its thing.
There is no such similar thing for Arrays which is why you need to jump
through the to_java hoops to convert between them.
Hope this helps,
-Mario.
···
On Wed, Oct 14, 2009 at 11:51, Axel Etzold <AEtzold@gmx.de> wrote:
I really need some advice from somebody who has worked with JRuby here,
I guess. I just cannot find a way of writing a Java Matrix without curly
braces, yet the Ruby part of JRuby interprets curly braces as Hashes.