1

私は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。これは避けたいと思います。次の成功したアサーションのセットが示すように、私は試しましたが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スクリプトが実際にメソッドを呼び出さずに、特定の名前のメソッドを定義しているかどうかを判断するために使用できる他の手法はありますか?

4

1 に答える 1

2

グローバル メソッドを定義すると、 のプライベート メソッドになりObjectます。したがって、これを機能させるには、include_allパラメータを使用する必要があります。respond_to?

container.runScriptlet("Object::respond_to?(:processDoc, true)")
于 2013-03-24T13:19:10.970 に答える