私は Http エンドポイント テストを行うために Groovy で DSL を作成しています。それを自然言語風にしたいのですが、「with」メソッドを持つオブジェクトがあります。コマンドをチェーンすると、メソッドは正しく呼び出されますが、変数スクリプトで「with」メソッドが呼び出されると、既存の Groovy の「with(Closure)」が使用されるため、コンパイルが失敗します。DSL スクリプト ファイルは、GroovyShell で読み込まれ、実行されます。
これは機能します:
request = http GET to "${url}" with headers, [ 'Cookie': 'monster' ]
しかし、これはしません:
request = http GET to "${url}"
request with headers, [ 'Cookie': 'monster' ]
呼び出されるオブジェクトは Java で記述されていますが、Groovy に移動できます。これはメソッド シグネチャです。
<returns this> with(HttpMethodElement eml, Object value);
返されたエラーから、Java with メソッドが見つからず、Closure が渡されていないと不平を言っているようです。明示的な括弧を追加すると、メソッドが見つからないという例外が発生します。変数に割り当てられる前に見つかったので、これは紛らわしいです...
expecting EOF, found ',' @ line 6, column 31.
request = request with headers, [ 'Cookie': 'monster' ]
^
Groovy は、スクリプト内で Java オブジェクトを Groovy オブジェクトに変換またはラップしている可能性があると思いますが、2 つのメソッドは異なる署名を持っており、合法である必要があります。