命名参数的 Groovy 用法

2024-01-04

我有一个像这样的绝妙方法

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)

它给了我这个例外

 No signature of method:createMyObj is applicable for argument types: (java.util.LinkedHashMap) values [[id:10, instanceId:20,..]]

我去了这个page http://groovy.codehaus.org/Extended+Guide+to+Method+Signatures为了进一步理解这个概念,我看到了这段代码片段。

的情况下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)

为了传递第二个参数,您只需要在调用时再添加一个参数,如下所示:

def foo(x,y){}
foo(x:1,y:2,"newParameter")

在这种情况下foo gets

  • x as [x:1, y:2](这是一个LinkedHashMap)
  • y as "newParameter"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

命名参数的 Groovy 用法 的相关文章

随机推荐

  • 将系统属性从 Gradle 传递到 Spring Boot

    我想将某些安全敏感属性传递到我的 Spring Boot 应用程序中 我在开发过程中通过命令行和 或外部设置的系统属性通过 Gradle 启动该应用程序 我无法将这些写入 build gradle 脚本或属性文件之类的内容 因为它们将被提交
  • 快速写出png

    Summary 我想尽快编写一个 png 文件 而不用担心压缩 也就是说 我不太关心文件大小 但我确实关心写入尽可能快地发生 动机 我正在客户端使用 OpenLayers 并在后端使用 python C 制作一个基于 Web 的地图应用程序
  • 运算符重载?

    我让自己成为了一个 RSS 阅读器 它可以让我了解最新情况并通知我新节目 或者至少这就是背后的想法 我创建了一个结构体 SeasonEpisode 其中包含两个整数 季节 剧集 和一个覆盖 ToString 函数 我将最新观看的内容存储在本
  • 从文本文件中删除行的有效方法

    我需要从文本文件中删除特定行 做到这一点最有效的方法是什么 文件可能很大 超过百万条记录 更新 下面是我当前正在使用的代码 但我不确定它是否好 internal void DeleteMarkedEntries string tempPat
  • 无法在 Django 中创建自定义 __str__ 调用父级的 __str__

    尽管我知道如何制作它 并且已经搜索了比较我的代码的示例 但我不明白为什么我不能调用具有其自身的模型 str 在其父级内部调用 str 我得到一个RuntimeError maximum recursion depth exceeded in
  • 如何将列值转换为列?

    我已经浏览了 Stackoverflow 在线图书和 google 上的大量 SQL Pivot 示例 但我仍然无法弄清楚如何执行 我称之为 简单的 Pivot 操作 实施例1 https stackoverflow com questio
  • 如何轻松检查 .NET 中的文件访问是否被拒绝?

    基本上 我想在实际尝试打开文件之前检查我是否有权打开该文件 除非必须 否则我不想使用 try catch 进行此检查 是否有我可以事先检查的文件访问属性 过去我已经做过无数次这样的事了 但几乎每次我的尝试都是错误的 文件权限 甚至文件存在
  • 重复播放后媒体播放器错误 (-19,0)

    我有一款游戏 当关卡完成时会播放声音 一开始一切正常 但在重复 10 或 20 次级别后 logcat 突然报告 MediaPlayer 错误 19 0 和 或 MediaPlayer 在状态 0 下启动 并且不再发出声音 我最初有 mp3
  • 如何使用 PIL 优化调色板图像大小?

    我的目标是在黑色图像上绘制一些多边形 以使所得图像的总尺寸尽可能小 所以我在维基上读了一篇关于索引颜色的文章 link https en wikipedia org wiki Indexed color 并且这对我来说似乎是一个不错的选择
  • MSSQL/dblib 的 PDO 日期时间格式

    MSSQL 2005 数据库具有排序规则 German Phonebook BIN 但这并不重要 与数据库的连接是通过 PDO 和 FreeTDS 完成的 在 Debian Squeeze 下使用 PHP 当我尝试从表中选择日期时间值时 我
  • 如何注释掉 XML 元素(使用 minidom DOM 实现)

    我想注释掉 xml 文件中的特定 XML 元素 我可以删除该元素 但我更愿意将其注释掉 以备以后需要 我目前使用的删除元素的代码如下所示 from xml dom import minidom doc minidom parse myXml
  • Django 编辑用户配置文件

    我正在尝试在前面创建一个 编辑个人资料 表单 发生的情况是我的表单 我不是 100 确定 尝试创建一个用户 而不是查找当前用户并更新他的个人资料 所以我认为这就是问题所在 在这里检查了很多问题 但没有一个足够清楚 我尝试编辑的字段是电子邮件
  • 此处不允许使用列 Oracle SQL 处理多个列

    我正在尝试将记录插入表中 但当我插入此记录时 我的 项目评级列 下例中的 PG 上出现 此处不允许列 错误 INSERT INTO ITEM VALUES item s1 NEXTVAL 786936161878 SELECT common
  • Rails 反跳延迟作业后台任务?删除重复项

    去抖是推迟函数 作业执行直到经过一定时间之后的常用方法 用例 来自多个用户的活跃聊天对话 他们不应该收到每条键入消息的电子邮件通知 但很可能在几分钟的静默后 如果消息未读 用户应该会看到一条通知 延迟作业 没有解决方案 有相关问题 http
  • 互斥查询

    Question 您如何将产生互斥结果的 IF ELSE 分配到产生相同结果的查询中 Use Case 作为主体 当前登录的用户 我可以获得组织中的用户列表 如果我被分配到任何部门 那么用户列表是分配到相同部门的较小的集合 Example
  • OpenCV C++ 转换为 Java 以解决形状检测问题

    我们对 openCV Java 开发有点陌生 遇到了一个问题 我们正在努力转型这段代码 https github com bsdnoobz opencv code blob master shape detect cpp到 Android
  • Python3 - Sympy:展开三角函数的乘积

    我找不到让 SymPy 扩展产品的方法 例如cos a cos b 转化为角度和的三角函数之和 from sympy import init printing wrf wlo t symbols omega RF omega LO t c
  • 如果我的状态没有改变,还需要 OTP 吗?

    我有一个 erlang 项目 其状态完全是只读的 由 ets 表和编译模块 https stackoverflow com questions 5130382 erlang gen server with a large state 代码启
  • 多处理中的共享内存对象

    假设我有一个内存很大的 numpy 数组 我有一个函数func它将这个巨大的数组作为输入 以及一些其他参数 func不同参数可以并行运行 例如 def func arr param do stuff to arr param build a
  • 命名参数的 Groovy 用法

    我有一个像这样的绝妙方法 def createMyObj id instanceId isValid def myObj new SomeObj myObj setId id myObj setInstanceId instanceId m