我正在 Groovy 中创建一个 DSL 来进行 Http 端点测试,我希望它是自然语言的,并且我有具有“with”方法的对象。当我链接命令时,我的方法被正确调用,但是如果在变量脚本上调用 'with' 方法,则编译失败,因为使用了现有的 Groovy 'with(Closure)'。使用 GroovyShell 读取和执行 DSL 脚本文件。
这有效:
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,并抱怨没有传入闭包。如果我添加显式括号,我会得到一个找不到方法的异常。这是令人困惑的,因为它是在分配给变量之前发现的......
expecting EOF, found ',' @ line 6, column 31.
request = request with headers, [ 'Cookie': 'monster' ]
^
我认为 Groovy 可能正在将 Java 对象转换或包装成脚本中的 Groovy 对象,但这两种方法具有不同的签名并且应该是合法的。