0

私は 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 つのメソッドは異なる署名を持っており、合法である必要があります。

4

1 に答える 1

0

パーサーです

グルービーは見る

request = http GET to "${url}" with headers, [ 'Cookie': 'monster' ]

として

request = http( GET ).to( "${url}" ).with( headers, [ 'Cookie': 'monster' ] )

あなたが見たようにこれは問題ありませんが、解析しようとすると

request with headers, [ 'Cookie': 'monster' ]

と見られる

request( with headers, [ 'Cookie': 'monster' ] )

したがって、 with がパラメーターになり、コンマが欠落しているため、問題が発生します。基本的にパーサーは失われます

于 2013-07-18T19:58:34.767 に答える