groovysh 找不到方法

标签 groovy groovyshell

我将以下脚本加载到 groovysh 中:

def a() {
    println "a()"
}

def b() {
    println "b()"
    a()
}

通过使用 :load 'test.groovy'并调用方法 b():
b()

我得到:
groovy:000> b()
b()
No signature of method: groovysh_evaluate.a() is applicable for argument types: () values: []
Possible solutions: b(), any(), is(java.lang.Object), any(groovy.lang.Closure), wait(), run()
        at groovysh_evaluate.b (groovysh_evaluate:5)

为什么groovysh找不到方法a()?

最佳答案

作为一种解决方法,您可以使用闭包而不是方法:

a =  {
    println "a()"
}

b = {
    println "b()"
    a()
}

它给:
groovy:000> a =  {
groovy:001>     println "a()"
groovy:002> }
===> groovysh_evaluate$_run_closure1@74a6f9c1
groovy:000> 
groovy:000> b = {
groovy:001>     println "b()"
groovy:002>     a()
groovy:003> }
===> groovysh_evaluate$_run_closure1@7922d892
groovy:000> a()
a()
===> null
groovy:000> b()
b()
a()
===> null
groovy:000> 

但是不知道为什么它不起作用。

关于groovysh 找不到方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31679819/

相关文章:

java - 当从可运行的 jar 执行时,缺少resolveStrategy会破坏DSL

jenkins - 让 Jenkins 建立失败

import - 如何从工作区导入插件项目而不指定它们?

常规 ^ 运算符

java - 未找到 Groovy HTTP ResponseParseException

grails - 我是否需要做一些特殊的事情才能使命令对象在grails中实例化?

java - 避免为每条记录重新初始化 groovy shell

GroovyShell().parse 传递参数

grails - Groovy 变量双重替换