Groovy проверочный массив содержит строку, не работает одинаково с литеральной строкой и строкой concat - PullRequest
0 голосов
/ 01 июля 2019

Когда вы проверяете литеральную строку в списке или массиве, она работает хорошо. Но когда вы проверяете строку concat в списке или массиве, она возвращает неверный результат.

И если сравнивать буквальную строку и строку concat напрямую, они считаются идентичными.

Я потерпел неудачу на конвейере 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


1 Ответ

0 голосов
/ 01 июля 2019

Кажется, что это исправили, изменив эту строку

def issue_file = "issue-${signal_dc_key}.json"

на

def issue_file = new String("issue-${signal_dc_key}.json" )

Но new String НЕ разрешено в Jenkins.

Благодаря комментарию Майкла Резерфурда, toString() работает и разрешено в Jenkins.

def issue_file = "issue-${signal_dc_key}.json".toString()
...