扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
Listing 6. Embed a Ruby interpreter
... // JRuby must be registered in BSF. // jruby.jar and bsf.jar must be on classpath. BSFManager.registerScriptingEngine("ruby", "org.jruby.javasupport.bsf.JRubyEngine", new String[]{"rb"}); BSFManager manager = new BSFManager(); // Make the variable myUrl available from Ruby. manager.declareBean("myUrl", new URL("http://www/jruby.org"), URL.class); // Note that the Method getDefaultPort is available from Ruby // as getDefaultPort and also as defaultPort. // The following line illustrates the combination of Ruby syntax // and a Java method call. String result = (String) manager.eval( "ruby", "(java)", 1, 1, "if $myUrl.defaultPort< 1024 then " + "'System port' else 'User port' end"); |
在Java里面直接使用JRuby解释器也是可能的,但是像这样会连接你的Java代码到Ruby规范化的Java封装类,这些在BSF/JSR223里面是很严格的。
局限性
很重要的一点是你必须记住JRuby仍然在开发中,它还有很多局限,这些在1.0 release版本之前会固定下来。
一个Ruby类是不能从一个Java抽象类继承的。不幸的是,这种限制使你不能简单创建一个具体的Java子类,使用虚方法实现抽象方法用于让Ruby类来继承。这是因为在Ruby/Java继承在JRuby的最近的版本中的第二个限制:Java代码不能多态地调用重写一个Java方法的Ruby方法。
这些限制让Swing的使用显得很困难。比如,通过继承AbstractTableModel去利用添加到TableModel接口的功能是不可能的。你能够将继承转化为代理绕过这个限制:使用一个具体Java填充类继承于抽象类作为类型接口的一个代理,这个接口包括所有的Java方法。一个Ruby类实现这个代理接口。尽管这种做法近似于排除了JRuby的平常优势,但是它提供了基于这个局限的工作区而且在需要的地方提供了弹性:在子类功能里。
Ruby的标准库提供了很多方面的功能。这些不使用本地代码的方式,在JRuby版本中是包含了的。JRuby团队逐渐地完善很多类库,虽然一些是在本地代码上的一个简单层次,就像GUI类Tk一样,将不会再完善。包含其中的Java标准库,提供了很多必要的功能。
JRuby现在在WEBrick Web服务器上提供了Ruby on Rails的基本支持;接下来的一个milestone版本里面将会在任何Servlet容器里面实现RoR的支持。RoR支持将使程序员利用一系列存在的Java库与Web框架的简易性结合在一起,但是确认JRuby是一种可选的Ruby解释器。
因为有BUG,JRuby 0.9需要Java SE 5,但是将会在下一个版本中支持JRE 1.4。
例子
例子jms_example.rb举例说明了JRuby增长长度的用法。它显示了如何将消息从一个类结构传到另外一个类,结合两种不同点的模拟软件定义了分布式游戏引擎。这些代码使用先进的功能和元程序技术将任何类型的XML消息作为Ruby对象进行传输。代码注释可以帮助理解程序逻辑。
在Java里面使用配置到达这种水平是不可能的;至少,用户能够插入编译代码。但是在Ruby里,动态代码是像静态代码一样自然和容易使用的。
Ruby和Java的未来
Ruby可以教会Java程序员很多。RoR框架显示了开发Web应用程序是如此的简单;利用JRuby,RoR将能够重用存在的Java功能。JRuby将在Java应用程序中加入Jython,JavaScript,和其他各种动态脚本语言。想要掌握这些技巧的开发人员需要学习动态脚本,这些将会覆盖越来越多的应用程序开发领域。尽管不使用动态脚本,Java开发者也能够看到Ruby带来的利益如同功能程序和元程序的概念。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者