让我们考虑下一个功能:
def generateUniqueIdent(String text, uniqueSuffix = {uid -> String.valueOf(uid)}) {
doSomething(text) + uniqueSuffix()
}
现在,当我尝试下一次修改时:
def generateUniqueIdent(String text, uniqueSuffix = { hash(text) }) {
doSomething(text) + uniqueSuffix()
}
..我收到了下一个错误:
|错误编译期间出现致命错误 org.apache.tools.ant.BuildException:BUG!阶段'阶段的例外 生成'在源单位''这里的一些路径'试图得到一个变量 名称 text 作为堆栈变量,但是带有此变量的变量 未创建名称(使用--stacktrace查看完整跟踪)
同时,如果我尝试使用名称text
作为闭包的参数:
def generateUniqueIdent(String text, uniqueSuffix = {text -> hash(text) }) {
doSomething(text) + uniqueSuffix(text)
}
..然后我又收到了一个错误:
当前范围已包含名称文本
的变量
问题是:我可以以某种方式从闭包中获取其他参数,该闭包被指定为函数参数之一的默认值吗?
如果没有,那么,为什么我不能使用与所描述的闭包中的一个函数参数相同的名称?
答案 0 :(得分:2)
您可以使用默认的it
参数:
def generateUniqueIdent(String text, uniqueSuffix = { hash(it) }) {
doSomething(text) + uniqueSuffix(text)
}
或者为闭包参数使用不同的名称而不是text
:
def generateUniqueIdent(String text, uniqueSuffix = { x -> hash(x) }) {
doSomething(text) + uniqueSuffix(text)
}
(example)
不幸的是,在这种情况下,对我来说,从闭包is working访问前一个参数,所以我不知道原来的问题是什么:S