我通过JRuby在一个Java应用程序中嵌入Ruby,并且需要测试给定的Ruby脚本是否定义了各种方法。我有一个非常简单的JRuby设置:
ScriptingContainer container = new ScriptingContainer();
Object receiver = container.runScriptlet(new FileReader(SCRIPT_PATH));
其中SCRIPT_PATH
是包含以下内容的文件:
def processDoc(doc)
return doc
end
我现在想确定脚本是否定义了processDoc
方法,但找不到实际调用processDoc
以外的方法,我宁愿避免使用。{1}}。我已经尝试了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脚本是否定义了一个具有特定名称的方法,而没有实际调用该方法?
答案 0 :(得分:2)
定义全局方法时,它将成为Object
的私有方法。因此,您必须使用respond_to?
的include_all
参数才能使其生效:
container.runScriptlet("Object::respond_to?(:processDoc, true)")