gpt4 book ai didi

groovy - Groovy命名参数的用法

转载 作者:行者123 更新时间:2023-12-04 17:10:34 24 4
gpt4 key购买 nike

我有这样的俗套方法

def createMyObj(id,instanceId,isValid) {

def myObj = new SomeObj()
myObj.setId(id)
myObj.setInstanceId(instanceId)
myObj.isValid(isValid)

myObj

}

当我在测试中明确地执行此操作时,我对此进行了测试。
def testObj = createMyObj(10,20,true)

当我尝试使用这样的命名参数时。
def testObj = createMyObj(id:10,instanceId:20,isValid:true)

这给了我这个异常(exception)
 No signature of method:createMyObj is applicable for argument types: (java.util.LinkedHashMap) values [[id:10, instanceId:20,..]]

我去了 page进一步理解了这个概念,并且看到了这段代码。

如果是 def foo(T t, p1, p2, ..., pn),则所有已命名的参数都位于t中,但这也意味着您无法在通过名称访问pi的地方进行方法调用。例子
def foo(x,y){}
foo(x:1,y:2)

该代码将在运行时失败,因为方法foo需要两个参数,但是您提供的映射仅是一个参数。

我不确定这是否是我面临的错误的原因。如果它期望像这样的两个参数,则说明我缺少什么参数,或者如何传递第二个参数?

最佳答案

用这样的命名参数调用函数:

def testObj = createMyObj(id:10,instanceId:20,isValid:true)

表示您只向函数传递了一个参数 [id:10,instanceId:20,isValid:true](即 LinkedHashMap)。

显然,createMyObj(id,instanceId,isValid)需要3个参数。因此可以得到以下异常:
No signature of method:createMyObj is applicable for argument types: (java.util.LinkedHashMap) values [[id:10, instanceId:20,..]]

对于后一种情况:
def foo(x,y){}
foo(x:1,y:2)

为了传递第二个参数,您只需要在invoke上再添加一个参数,如下所示:
def foo(x,y){}
foo(x:1,y:2,"newParameter")

在这种情况下, foo得到
  • x作为[x:1, y:2](这是LinkedHashMap)
  • y作为"newParameter"
  • 关于groovy - Groovy命名参数的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16725379/

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