Ruby to Java 変換

JRubyからJava呼び出しの際にどんなオブジェクトが渡るかテスト

public class Convert {
	public static void print(Object obj){
		System.out.println(obj.getClass() +":"+ obj);
	}
}
include Java

def conv obj
  Java::Convert.print obj
end

conv 1
conv 1.1
conv "a"
conv true
conv 1 << 128
conv :a
conv [4,5,6]
conv({:a=>1, "b"=>0.1})
puts

conv 1..4
conv /.*/
conv proc{}
require 'set'; conv Set.new []
conv 1.class
conv Java
begin
  1.java_class
rescue => e
  conv e
end
puts

conv Dir.new "."
conv (f=File.new("conv.rb")); f.close
conv [9,8].to_java
conv [9,8].to_java :int
  • 結果
class java.lang.Long:1
class java.lang.Double:1.1
class java.lang.String:a
class java.lang.Boolean:true
class java.math.BigInteger:340282366920938463463374607431768211456
class org.jruby.RubySymbol:a
class org.jruby.RubyArray:456
class org.jruby.RubyHash:a1b0.1

class org.jruby.RubyRange:1..4
class org.jruby.RubyRegexp:(?-mix:.*)
class org.jruby.RubyProc:#<Proc:0x257807a@conv.rb:19>
class org.jruby.RubyObject:#<Set:0x176f5261>
class org.jruby.RubyClass:Fixnum
class org.jruby.RubyModule:Java
class org.jruby.RubyNoMethodError:undefined method `java_class' for 1:Fixnum

class org.jruby.RubyDir:#<Dir:0x552a66ea>
class org.jruby.RubyFile:RubyFile(conv.rb, 1, 4)
class [Ljava.lang.Object;:[Ljava.lang.Object;@174323d5
class [I:[I@637050f5