问题标签 [gstring]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
groovy - 如何从groovy中的多个字符串生成gstring?
我试图从这段代码生成 gstring 但不起作用
这个打印 ${date}
我需要打印 01
请帮我
groovy - 为什么这个 groovy 地图调用 containsKey() 失败?
我想我把这些声明搞砸了,但我有一个 groovy 类,其字段定义如下:
我做这样的插入:
...然后,当我检查我知道已映射的键是否存在时,检查失败:
我能让这个成功的唯一方法是调用toString()
,如下所示:
我正在使用映射的通用声明,因此我的 IDE 为我提供了值类型的自动完成功能,所以我真的很想(我认为)将类型信息保留在那里。
我尝试将密钥类型从String
to更改为GString
,但无济于事。我尝试将地图初始化从 groovy 速记[:]
更改为new LinkedHashMap<>
,但也无济于事。
我是否可以保留类型信息并避免使用的任何想法toString()
?
groovy - 如何在循环中以字符串形式访问 Jenkinsfile 参数值
在我们的 Jenkinsfile 中,我们有很多参数(参数化构建),在这种情况下,我想检查每个参数是否被切换并采取行动。这些参数具有相似的名称,但以不同的小数结尾,所以我想遍历它们来实现这一点。
我有类似的东西:
但我想有类似的东西:
我试图寻找解决方案并在 GroovyConsole 上进行了实验,但没有成功。看起来它与“绑定”有关,但我对此并不熟悉。
string - Jenkinsfile 中变量的插值
我现在正在寻求帮助,因为我一直在努力解决一个sed
需要在 Jenkinsfile 中调用的简单命令,该命令需要一些变量插值。
更好地显示命令而不是大解释:
sed
不同意此语法并打印命令s/
未完成。
我已阅读有关 String 和 GString 的 Groovy 文档,但我仍然不明白我做错了什么?
这有什么线索吗?
编辑:
我unixEpoch
通过调用date +%s
来获取当前时间戳。
我打印了命令只是为了确定执行了什么,我发现:
发送的完整错误sed
是:
sed: -e expression #1, char 22: unterminated 's' command
我发现打印的命令\n
中间有一个很奇怪......
string - 无法将从输入对话框输入的字符串与 Groovy 中的不同字符串进行比较
下面是我的代码:
我输入输入为syst
当我比较这就是我正在做的
还尝试了许多其他方法来比较喜欢
但以上都不起作用,条件不满足。如何将声明的字符串与从对话框输入的字符串进行比较?
groovy - 在定义插值变量之前定义字符串时的 Groovy 字符串插值
我有一个类似的问题:
可以做些什么来完成以下工作:
所以我想取一个已经在别处定义的字符串(为简单起见,我在这里将其定义为“消息”),已经嵌入了插入的 ${date} 和 ${id} ,并使用闭包在此处处理它,带有输入字段的定义。
我已经尝试了各种更改,在没有“$ {}”的闭包中定义消息,使用单引号或双引号,在字符串'message'中的插值变量周围嵌入双引号等,我总是得到这个结果:
但我想说:
以下方法有效,但我不确定这是否是最好的方法:
http://docs.groovy-lang.org/latest/html/documentation/guide-integrating.html
templates - 避免 groovy 模板中的新断线
我YAML file
的配置名称为applications.yaml,这些数据将是我的绑定:
然后我有一个模板文件applications.config:
并将所有内容放在一起:
现在的问题是:这个过程的输出是:
但我想要这个:
我不知道为什么那里有那些额外的空间。我想删除那些,但我看不到这些新的或断线的放置方式、时间或内容。
谢谢你。
json - 在 Groovy 中将 Json 字符串解析为 GStrings
我正在尝试在 Groovy 中解析一个 Json 文件,其中包含一个List
of String
s。其中一些字符串包含GString
格式,因此我希望将它们解析为GString
s 而不是普通String
的 s。
例如,description
下面的成员将包含 1GString
和 7 String
s:
(我不习惯格式化GString
s,所以可能不正确,在这种情况下我道歉)
一个Map
额外的成员(例如"grenadeDamage"
在上面的 Json 文件中)将包含他们的名字到他们各自List
的 s 的映射。然后这些将被传递到这样布局的类中:
这里的希望是在运行时调用时将GString
s 中的任何 s转换List
为常规String
s 。getDescription()
在给定的示例中,如果level
字段为 7,则 的第 5 行将description
填充${variables}.get('grenadeDamage').get(${level})
到 value1d8
或 中的第 7 项grenadeDamage
。
这样做的问题是,当使用 aJsonSlurper
来解析 Json 文件时,description
会直接创建为 a List<String>
。理想情况下,我想在description
不立即将类型强制为String
.
欢迎和赞赏任何意见、建议和建设性批评!
groovy - 当 GString 将更改其 toString 表示时
我正在阅读https://groovy-lang.org/closures.html#this中的 Groovy 闭包文档。对 GString 行为有疑问。
- GString 中的闭包
该文件提到了以下内容:
采取以下代码:
代码的行为与您预期的一样,但是如果您添加以下内容会发生什么:
你会看到断言失败了!有两个原因:
GString 仅懒惰地评估值的 toString 表示
GString 中的语法 ${x} 不代表闭包,而是 $x 的表达式,在创建 GString 时进行评估。
在我们的示例中,GString 是使用引用 x 的表达式创建的。当 GString 被创建时,x 的值为 1,因此 GString 被创建为值为 1。当断言被触发时,GString 被求值并使用 toString 将 1 转换为 String。当我们将 x 更改为 2 时,我们确实更改了 x 的值,但它是一个不同的对象,GString 仍然引用旧的。
只有当 GString 引用的值发生变化时,GString 才会更改其 toString 表示。如果引用发生变化,什么都不会发生。
我的问题是关于上面引用的解释,在示例代码中,1 显然是一个值,而不是引用类型,那么如果这个陈述是真的,它应该在 GString 中更新为 2 对吗?
下面列出的下一个示例我也觉得有点困惑(最后一部分)为什么如果我们改变 Sam 以将他的名字更改为 Lucy,这次 GString 被正确地改变了?我期待它不会变异??为什么两个示例中的行为如此不同?
为什么评论说'这次 GString 正确变异了?在之前的评论中,它刚刚提到
字符串仍然计算为 Sam,因为它是创建 GString 时 p 的值,创建 String 时 p 的值是 'Sam'
因此我认为它不应该在这里改变?感谢您的帮助。
groovy - 在 Jenkinsfile 中调用可变参数函数意外失败
语境
我在 Windows 上运行 Jenkins,编写声明性管道。我试图将多个命令放在一个bat
步骤中,同时如果任何包含的命令失败,仍然会使该步骤失败。
这样做的目的是双重的。
- 最佳实践文档表明,为每件小事创建一个步骤可能不是最好的主意(也可以通过将更多内容放入批处理文件来解决,但我的构建还没有那么大)
- 我想在 Visual Studio 命令提示符中执行一些命令,这是通过首先设置环境
call
的.bat
文件,然后执行任何必要的命令来实现的。
代码
我在我的代码中编写了以下 Groovy 代码Jenkinsfile
:
问题/问题
我不能让它可靠地工作。也就是说,在单个Jenkinsfile
中,我可以多次调用ExecuteMultipleCmdSteps()
,有些会按预期工作,而另一些会失败java.lang.NoSuchMethodError: No such DSL method 'ExecuteMultipleCmdSteps' found among steps [addBadge, ...
我还没有发现失败的任何模式。我认为它仅在从块内执行时失败warnError
,但现在我在块内也遇到问题dir()
,而在不同的块中Jenkinsfile
,它工作正常。
这个问题似乎与ExecuteMultipleCmdSteps()
可变参数函数有关。如果我提供具有正确数量的参数的重载,则使用该重载没有问题。
我在这里不知所措。非常欢迎您的意见。
失败的解决方案
在某些时候,我认为这可能是一个范围界定/导入的事情,所以我按照这个答案ExecuteMultipleCmdSteps()
的建议将其包含在一个类(下面的代码)中。现在,该方法被称为,结果是Helpers.ExecuteMultipleCmdSteps()
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: No such static method found: staticMethod Helpers ExecuteMultipleCmdSteps org.codehaus.groovy.runtime.GStringImpl org.codehaus.groovy.runtime.GStringImpl
最小失败示例
考虑以下:
我希望所有呼叫都会SillyEcho()
得到Hello
回应。实际上,前两个成功,最后一个结果java.lang.NoSuchMethodError: No such DSL method 'SillyEcho' found among steps [addBadge, addErrorBadge,...
奇怪的成功例子
考虑以下 groovy 脚本,几乎等同于上面的失败示例:
当粘贴到 Groovy 脚本控制台(例如 Jenkins 提供的控制台)时,此操作成功(Hello
打印 3 次)。
尽管我希望这个示例能够成功,但我也希望它的行为与上面失败的示例一致,所以我对这个示例有点失望。