当您检查列表或数组中的文字字符串时,它效果很好。 但是,当您检查列表或数组中的连接字符串时,它会返回错误的结果。
当直接比较文字字符串和连接字符串时,它们被认为是相同的。
我使用这些代码在 Jenkins 管道上失败了,并且直接在 Groovy 1.8.9 上进行了尝试,结果是相同的。
在此代码中,issue_file = "issue-${signal_dc_key}.json"
,然后 contains
返回 false
def issued_list = ["names":["issue-something-DC-VV.json","issue-else-DC-VV.json"]]
def signal_dc_key = "something-DC-VV"
def issue_file = "issue-${signal_dc_key}.json"
println issue_file // issue-something-DC-VV.json
println issue_file == "issue-something-DC-VV.json" // true
println issue_file == "issue-${signal_dc_key}.json" // true
println issued_list["names"].contains("${issue_file}") // false
println issued_list["names"].contains(issue_file) // false
println issued_list["names"].contains("issue-something-DC-VV.json") // true
在此代码中,issue_file = "issue-something-DC-VV.json"
,contains
返回 true
。
def issued_list = ["names":["issue-something-DC-VV.json","issue-else-DC-VV.json"]]
def signal_dc_key = "something-DC-VV"
def issue_file = "issue-something-DC-VV.json"
println issue_file // issue-something-DC-VV.json
println issue_file == "issue-something-DC-VV.json" // true
println issue_file == "issue-${signal_dc_key}.json" // true
println issued_list["names"].contains("${issue_file}") // false
println issued_list["names"].contains(issue_file) // true
println issued_list["names"].contains("issue-something-DC-VV.json") // true
最佳答案
似乎通过更改此行来修复
def issue_file = "issue-${signal_dc_key}.json"
到
def issue_file = new String("issue-${signal_dc_key}.json" )
但是 Jenkins 中不允许使用 new String
。
感谢 Michael Rutherfurd 的评论,toString()
可以在 Jenkins 中工作并被允许。
def issue_file = "issue-${signal_dc_key}.json".toString()
关于arrays - Groovy 检查包含字符串的数组与文字字符串和连接字符串的工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56829842/