Archives JRuby和Java的互操作
Post
Cancel

JRuby和Java的互操作

我试图让新的BL框架支持所有流行的JVM语言。Scala很简单,天衣无缝,但是Ruby和Python就比较周折了。不谈Python,先看看Ruby,确切地说是JRuby。

jrubyc可以把一个Ruby的class编译成Java的,看看下面的例子:

Bar.java

1
2
3
4
5
package com.honnix.foo;
 
interface Bar {
    int getValue();
}

BarImpl.rb

1
2
3
4
5
6
7
8
9
10
11
java_package 'com.honnix.foo'
require 'java'
 
class BarImpl
  include Java::com.honnix.foo.Bar
 
  java_signature 'int getValue()'
    def get()
      1
    end
end

> javac Bar.java
> jrubyc --javac -cp com.honnix.foo BarImpl.rb

这样基本上就差不多了。

不过看看生产的Java代码,就知道这样玩儿的效率恐怕成问题。其实就是先build出来一个Ruby代码的巨大字符串,然后给交给Ruby引擎去跑,最后返回结果。

不管怎么说,只是这是一个方案,接下来就是要考虑怎么把Java的Document转成Ruby喜欢的格式,再转回来。

This post is licensed under CC BY 4.0 by the author.