如何使用JRuby在Java中创建Ruby模块?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何使用JRuby在Java中创建Ruby模块?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1538字,纯文字阅读大概需要3分钟。
内容图文
在Ruby中,我可以有一个类似的模块:
module Greeter
def greet
print "Hello"
end
end
我的班级可以得到这样的问候方法:
class MyClass
include Greeter
end
obj = MyClass.new
obj.greet
现在,我想让我的模块Greeter用Java实现.我正在使用JRuby.我不确定如何用Java创建一个Ruby模块(这样我可以正常包含).
我曾经做过Java接口.将它包含在我的Ruby类中并不会抛出错误,但它实际上并不是一回事,因为模块似乎实现了这些方法,而Java接口却没有.
解决方法:
以下是如何使用Java扩展实现与上面完全相同的代码.
这里的所有内容都是默认的包级别(没有包),如果你想让包只更改模块名称.
首先,创建Greeter类:
import org.jruby.anno.JRubyMethod;
import org.jruby.runtime.ThreadContext;
import org.jruby.runtime.builtin.IRubyObject;
public class Greeter {
@JRubyMethod
public static void greet( ThreadContext context, IRubyObject self ) {
System.out.printf("Hello from %s%n", self);
}
}
然后你需要GreeterService来加载它:
import org.jruby.Ruby;
import org.jruby.RubyModule;
import org.jruby.runtime.load.BasicLibraryService;
import java.io.IOException;
public class GreeterService implements BasicLibraryService {
@Override
public boolean basicLoad(final Ruby runtime) throws IOException {
RubyModule greeter = runtime.defineModule(Greeter.class.getSimpleName());
greeter.defineAnnotatedMethods(Greeter.class);
return true;
}
}
通过定义这些类,以下是如何在JRuby脚本中使用它们:
require 'target/jruby-example.jar'
require 'greeter'
class MyClass
include Greeter
end
obj = MyClass.new
obj.greet
jruby-example.jar包含上面编译和打包的类.这里没有什么可做的,现在你有了可以包含在任何地方的模块.更大的例子,只需检查Enumerable模块的实现方式.
内容总结
以上是互联网集市为您收集整理的如何使用JRuby在Java中创建Ruby模块?全部内容,希望文章能够帮你解决如何使用JRuby在Java中创建Ruby模块?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。