问题标签 [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.

0 投票
1 回答
37 浏览

groovy - 如何从groovy中的多个字符串生成gstring?

我试图从这段代码生成 gstring 但不起作用

这个打印 ${date}

我需要打印 01

请帮我

0 投票
1 回答
1262 浏览

groovy - 为什么这个 groovy 地图调用 containsKey() 失败?

我想我把这些声明搞砸了,但我有一个 groovy 类,其字段定义如下:

我做这样的插入:

...然后,当我检查我知道已映射的键是否存在时,检查失败:

我能让这个成功的唯一方法是调用toString(),如下所示:

我正在使用映射的通用声明,因此我的 IDE 为我提供了值类型的自动完成功能,所以我真的很想(我认为)将类型信息保留在那里。

我尝试将密钥类型从Stringto更改为GString,但无济于事。我尝试将地图初始化从 groovy 速记[:]更改为new LinkedHashMap<>,但也无济于事。

我是否可以保留类型信息并避免使用的任何想法toString()

0 投票
2 回答
10423 浏览

groovy - 如何在循环中以字符串形式访问 Jenkinsfile 参数值

在我们的 Jenkinsfile 中,我们有很多参数(参数化构建),在这种情况下,我想检查每个参数是否被切换并采取行动。这些参数具有相似的名称,但以不同的小数结尾,所以我想遍历它们来实现这一点。

我有类似的东西:

但我想有类似的东西:

我试图寻找解决方案并在 GroovyConsole 上进行了实验,但没有成功。看起来它与“绑定”有关,但我对此并不熟悉。

0 投票
1 回答
987 浏览

string - Jenkinsfile 中变量的插值

我现在正在寻求帮助,因为我一直在努力解决一个sed需要在 Jenkinsfile 中调用的简单命令,该命令需要一些变量插值。

更好地显示命令而不是大解释:

sed不同意此语法并打印命令s/未完成。

我已阅读有关 String 和 GString 的 Groovy 文档,但我仍然不明白我做错了什么?

这有什么线索吗?

编辑:

unixEpoch通过调用date +%s来获取当前时间戳。

我打印了命令只是为了确定执行了什么,我发现:

发送的完整错误sed是:

sed: -e expression #1, char 22: unterminated 's' command

我发现打印的命令\n中间有一个很奇怪......

0 投票
2 回答
61 浏览

string - 无法将从输入对话框输入的字符串与 Groovy 中的不同字符串进行比较

下面是我的代码:

我输入输入为syst

当我比较这就是我正在做的

还尝试了许多其他方法来比较喜欢

但以上都不起作用,条件不满足。如何将声明的字符串与从对话框输入的字符串进行比较?

0 投票
1 回答
827 浏览

groovy - 在定义插值变量之前定义字符串时的 Groovy 字符串插值

我有一个类似的问题:

Groovy 字符串插值,其值仅在运行时已知

可以做些什么来完成以下工作:

所以我想取一个已经在别处定义的字符串(为简单起见,我在这里将其定义为“消息”),已经嵌入了插入的 ${date} 和 ${id} ,并使用闭包在此处处理它,带有输入字段的定义。

我已经尝试了各种更改,在没有“$ {}”的闭包中定义消息,使用单引号或双引号,在字符串'message'中的插值变量周围嵌入双引号等,我总是得到这个结果:

但我想说:

以下方法有效,但我不确定这是否是最好的方法:

http://docs.groovy-lang.org/latest/html/documentation/guide-integrating.html

0 投票
3 回答
994 浏览

templates - 避免 groovy 模板中的新断线

YAML file的配置名称为applications.yaml,这些数据将是我的绑定:

然后我有一个模板文件applications.config

并将所有内容放在一起:

现在的问题是:这个过程的输出是:

但我想要这个:

我不知道为什么那里有那些额外的空间。我想删除那些,但我看不到这些新的或断线的放置方式、时间或内容。

谢谢你。

0 投票
0 回答
87 浏览

json - 在 Groovy 中将 Json 字符串解析为 GStrings

我正在尝试在 Groovy 中解析一个 Json 文件,其中包含一个Listof Strings。其中一些字符串包含GString格式,因此我希望将它们解析为GStrings 而不是普通String的 s。

例如,description下面的成员将包含 1GString和 7 Strings:

(我不习惯格式化GStrings,所以可能不正确,在这种情况下我道歉)

一个Map额外的成员(例如"grenadeDamage"在上面的 Json 文件中)将包含他们的名字到他们各自List的 s 的映射。然后这些将被传递到这样布局的类中:

这里的希望是在运行时调用时将GStrings 中的任何 s转换List为常规Strings 。getDescription()

在给定的示例中,如果level字段为 7,则 的第 5 行将description填充${variables}.get('grenadeDamage').get(${level})到 value1d8或 中的第 7 项grenadeDamage

这样做的问题是,当使用 aJsonSlurper来解析 Json 文件时,description会直接创建为 a List<String>。理想情况下,我想在description不立即将类型强制为String.

欢迎和赞赏任何意见、建议和建设性批评!

0 投票
2 回答
170 浏览

groovy - 当 GString 将更改其 toString 表示时

我正在阅读https://groovy-lang.org/closures.html#this中的 Groovy 闭包文档。对 GString 行为有疑问。

  1. 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'

因此我认为它不应该在这里改变?感谢您的帮助。

0 投票
2 回答
181 浏览

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 次)。

尽管我希望这个示例能够成功,但我也希望它的行为与上面失败的示例一致,所以我对这个示例有点失望。