在Groovy中递归关闭2.1.9
发布时间:2020-12-14 16:35:02 所属栏目:大数据 来源:网络整理
导读:我无法在Groovy 2.1.9中调用递归关闭 def facRec = {long n- return n1 ? n * facRec(n - 1) : 1} 我得到一个TypeMissmatch 解决方法 当定义闭包时,它不知道变量facRec,因为它还没有定义… 你可以做: def facRecfacRec = {long n- return n1 ? n * facRec(n
我无法在Groovy 2.1.9中调用递归关闭
def facRec = {long n-> return n>1 ? n * facRec(n - 1) : 1 } 我得到一个TypeMissmatch 解决方法
当定义闭包时,它不知道变量facRec,因为它还没有定义…
你可以做: def facRec facRec = {long n-> return n>1 ? n * facRec(n - 1) : 1 } 要解决这个问题,或者你可以将内部包装到另一个闭包中,并调用该内部关闭的所有者(尽管我会倾向于执行上述操作,因为它更容易阅读): def facRec = {long n-> { -> n > 1 ? n * owner.call( n - 1 ) : 1 }() } 应该注意的是,对于n的大值,这两个都将失败,因为您将溢出堆栈 你可以使用蹦床来解决这个问题: def facRec facRec = { n,count = 1G -> n > 1 ? facRec.trampoline( n - 1,count * n ) : count }.trampoline() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |