簡體   English   中英

如何檢查JRuby腳本是否定義了特定方法?

[英]How can I check whether a JRuby script defines a particular method?

我正在通過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' respond_to? 'processDoc'methods.include? 'processDoc' methods.include? '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腳本是否定義了具有特定名稱的方法,而無需實際調用該方法?

定義全局方法時,它將成為Object的私有方法。 因此,您必須將include_all參數用於respond_to? 使它起作用:

container.runScriptlet("Object::respond_to?(:processDoc, true)")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM