我试图让新的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喜欢的格式,再转回来。