加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

为什么我在Groovy shell中运行闭包递归示例时遇到“No signature

发布时间:2020-12-14 16:22:00 所属栏目:大数据 来源:网络整理
导读:我正在尝试从 http://groovy.codehaus.org/JN2515-Closures开始尝试Groovy闭包递归示例. 我将片段保存在一个名为recursionTest.groovy的文件中并将其加载到shell中,但我得到了“没有签名方法错误”: // recursionTest.groovy def results = [];{ a,b - resu
我正在尝试从 http://groovy.codehaus.org/JN2515-Closures开始尝试Groovy闭包递归示例.

我将片段保存在一个名为recursionTest.groovy的文件中并将其加载到shell中,但我得到了“没有签名方法错误”:

// recursionTest.groovy   

def results = [];
{ a,b ->
  results << a
  a<10 && call(b,a+b)
}(1,1)

assert results == [1,1,2,3,5,8,13]


groovy:000> load recursionTest.groovy
===> []
ERROR groovy.lang.MissingMethodException:
No signature of method: java.lang.Boolean.call() is applicable for argument types: (groovysh_evaluate$_run_closure1) values: [groovysh_evaluate$_run_closure1@6b7599cc]
Possible solutions: wait(),any(),wait(long),and(java.lang.Boolean),each(groovy.lang.Closure),any(groovy.lang.Closure)
        at groovysh_evaluate.run (groovysh_evaluate:1)
        ...
groovy:003>

这是怎么回事?

解决方法

我认为你的脚本有两个问题:

>在shell环境中,您有一定的范围.绑定的变量位于“绑定”中.要获得绑定中的一个,您必须在使用它之前确保它没有被定义!所以没有def结果.然而,这不是错误.
>可以通过命名闭包递归来修复强制转换的错误.结合不定义结果产生:

results = []; 

f = { a,b ->   
results << a   
a<10 && call(b,a+b) }(1,13]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读