当前位置: 首页 > 知识库问答 >
问题:

根据访问情况,找不到Groovy DSL方法

陈知
2023-03-14

我正在Groovy中创建一个DSL来进行Httpendpoint测试,我希望它是自然语言ish,并且我有一个带有“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并抱怨没有传入闭包。如果我添加显式括号,我会得到一个未找到方法的异常。这是令人困惑的,因为它是在分配给变量之前发现的...

expecting EOF, found ',' @ line 6, column 31.
request = request with headers, [ 'Cookie': 'monster' ]
                              ^

我认为Groovy可能会在脚本中对Java对象进行一些转换或包装成Groovy对象,但这两种方法具有不同的签名,应该是合法的。

共有1个答案

谢善
2023-03-14

是解析器

Groovy sees

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变成了一个参数,然后你缺少了一个逗号,这就导致了你的问题。基本上解析器丢失了

 类似资料:
  • 嗨,所有人, 我在不同的科目上有学生的分数。 表 #Maths 包含名为 a,b 和 c 的学生的数学分数。#Science和#English类似。 现在我想要的输出是,如果学生在两个科目上超过75分,他将被评为“优秀”。如果他的一门课超过75分,另一门课超过60分,那么他的成绩就是“及格”,如果没有一门课超过75分,而有一门课不到50分,那么他的成绩就是“不及格”。 请为结果提供解决方案? 谢啦

  • 我正在做一个课程项目飞行雷达模拟器。 情况是,当两架飞机危险地接近时,两架飞机的图像都发生了变化,而当它们处于安全距离时,它们又发生了变化。 问题是,大多数时候,只有一个图像被改成红色,我不知道问题出在哪里。

  • 我有两个应用程序,它们都执行不同的操作,但都针对 sdk 版本 30,并在清单和运行时请求READ_EXTERNAL_STORAGE权限。两者都是全新的,以前未安装在设备上。 使用运行Android 11的三星手机,我随后检查了两个应用程序的权限设置,并发现了这种差异: App #1 的权限设置为“仅允许访问媒体”,由于最近对存储访问的更改,这是我所期望的。但是,应用程序#2的权限设置为“允许访问

  • 问题内容: 在什么情况下需要同步对实例成员的访问?我知道对类的静态成员的访问始终需要同步-因为它们在该类的所有对象实例之间共享。 我的问题是,如果不同步实例成员,什么时候会出现错误? 例如,如果我的课程是 在什么情况下(使用该类),我 需要 使用以下方法: 和 ? 预先感谢您的回答。 问题答案: 这取决于您是否希望类是线程安全的。大多数类都不是线程安全的(为简单起见),在这种情况下,您不需要同步。

  • 本文向大家介绍layui实现根据table数据判断按钮显示情况的方法,包括了layui实现根据table数据判断按钮显示情况的方法的使用技巧和注意事项,需要的朋友参考一下 就可以根据table的数据实现判断toolbar按钮的显示状态和情况 实例如下所示: 以上这篇layui实现根据table数据判断按钮显示情况的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程

  • 当我运行我的新android项目时,我得到了错误: 因此,正如error所说,复制的本机库不在/verdor/lib或/system/lib中,在我的情况下如何解决这个问题? (我解压缩了apk包,在lib/there libcalculate.so下面) 但是当我运行我的应用程序时,同样的错误抛出: