【发布时间】:2013-03-13 13:32:12
【问题描述】:
我通过 JRuby 将 Ruby 嵌入到 Java 应用程序中,并且需要测试给定的 Ruby 脚本是否定义了各种方法。我有一个非常简单的 JRuby 设置:
ScriptingContainer container = new ScriptingContainer();
Object receiver = container.runScriptlet(new FileReader(SCRIPT_PATH));
SCRIPT_PATH 是一个包含以下内容的文件:
def processDoc(doc)
return doc
end
我现在想确定脚本是否定义了processDoc 方法,但除了实际调用processDoc 之外找不到其他方法,我希望避免这种方法。我尝试了respond_to? 'processDoc' 和methods.include? 'processDoc',这两种方法都不起作用,如下一组成功的断言所示:
Object doc = new Object();
assert container.runScriptlet("respond_to? :processDoc") == Boolean.FALSE;
assert container.runScriptlet("methods().include? 'processDoc'") == Boolean.FALSE;
assert receiver == null;
assert container.callMethod(receiver, "processDoc", doc) == doc;
我是否可以使用任何其他技术来确定一个简单的 JRuby 脚本是否定义了一个具有特定名称的方法,而无需实际调用该方法?
【问题讨论】: