首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Groovy的Path.traverse()扩展,IntelliJ idea语法错误

Groovy的Path.traverse()扩展,IntelliJ idea语法错误
EN

Stack Overflow用户
提问于 2022-05-16 11:53:03
回答 1查看 37关注 0票数 0

我正在编辑一个Groovy (3.0.10)脚本,并得到一个我不明白的语法错误:

当我在GroovyConsole中尝试这个时,它似乎工作得很好。

为什么IntelliJ的想法会抱怨?这与IntelliJ IDEA 2022.1.1有关。

文本中的片段:

代码语言:javascript
运行
复制
final java.nio.file.Path p;
p.traverse(type: FileType.FILES, nameFilter: ~/^\.deployment$/, maxDepth: 1) { final Path dotDeploymentPath ->
    println dotDeploymentPath
}

更新1

实际上,在我们的产品中运行脚本时,我从Groovy获得了相同的错误:

代码语言:javascript
运行
复制
Script4.groovy: 59: [Static type checking] - Cannot call java.nio.file.Path#traverse(java.util.Map <java.lang.String, java.lang.Object>, groovy.lang.Closure) with arguments [java.util.LinkedHashMap <java.lang.String, java.io.Serializable>, groovy.lang.Closure]
 @ line 59, column 9.
           extensionsPath.traverse(type: FileType.FILES, nameFilter: ~/^\.deployment$/, maxDepth: 1) { final Path dotDeploymentPath ->
           ^

更新2

我最终得到了这个,它似乎运作得很好。我仍然不明白为什么Groovy不喜欢将选项作为调用的参数。

代码语言:javascript
运行
复制
def final traverseOptions = [type: FileType.FILES, nameFilter: ~/^\.deployment$/, maxDepth: 1] as Map<String, Object>;
extensionsPath.traverse(traverseOptions) { final Path dotDeploymentPath ->
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-24 12:54:13

所以我想明白了。问题是我在班上使用了@CompileStatic。我使用@CompileStatic是因为我误解了它的作用。我认为这类似于在Java中使用static class。但这不是它所做的。相反,它所做的是从文档:这将使Groovy编译器使用编译时检查的风格,然后执行静态编译,从而绕过Groovy元对象协议。

(这表明提供自包含测试用例是多么重要。我应该更清楚地知道。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72258786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档