gpt4 book ai didi

grails - 使用闭包在Groovy中指定默认参数值

转载 作者:行者123 更新时间:2023-12-02 14:03:26 25 4
gpt4 key购买 nike

让我们考虑下一个函数:

def generateUniqueIdent(String text, uniqueSuffix = {uid -> String.valueOf(uid)}) {
doSomething(text) + uniqueSuffix()
}

现在,当我尝试下一个修改时:
def generateUniqueIdent(String text, uniqueSuffix = { hash(text) }) {
doSomething(text) + uniqueSuffix()
}

..我遇到下一个错误:

| Error Fatal error during compilation org.apache.tools.ant.BuildException: BUG! exception in phase 'class generation' in source unit 'some path here' tried to get a variable with the name text as stack variable, but a variable with this name was not created (Use --stacktrace to see the full trace)



同时,如果我尝试使用名称 text作为闭包的参数:
def generateUniqueIdent(String text, uniqueSuffix = {text -> hash(text) }) {
doSomething(text) + uniqueSuffix(text)
}

..然后我又遇到了一个错误:

The current scope already contains a variable of the name text



问题是:我能以某种方式从闭包访问其他参数吗?闭包是作为默认值分配给功能参数之一的?

如果否,那么为什么不能在所描述的闭包中使用与其中一个函数参数相同的名称?

最佳答案

您可以使用默认的it参数:

def generateUniqueIdent(String text, uniqueSuffix = { hash(it) }) {
doSomething(text) + uniqueSuffix(text)
}

( working example)

或为闭包参数使用其他名称,而不是 text:
def generateUniqueIdent(String text, uniqueSuffix = { x -> hash(x) }) {
doSomething(text) + uniqueSuffix(text)
}

( example)

不幸的是,在这种情况下,我从闭合 is working访问了先前的参数,所以我不知道原来的问题是什么:S

关于grails - 使用闭包在Groovy中指定默认参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11656815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com