Использование Groovy 3 YamlBuilder с Yaml, который содержит дефис - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь написать скрипт Groovy 3, который использует yamlbuilder для записи файла yaml. У меня это работает почти на все, кроме:

execution:
  set-props:
    url:http://myhouse.net
    port:8000

Как мне написать карту, которая позволяет использовать дефис в имени? Следуя моей предыдущей работе, я безрассудно пытался:

def setprops=[:]
setprops=(["url":"http://myhouse.net","port":"8000"])
execution.set-props=setprops

, что выдает мне ошибку «LHS присвоения должен быть переменной или полем».

Если я просто использую execute.setprops, тогда он работает нормально, но, конечно, полученный yaml из yaml (выполнение) недопустим.

Я думаю, что set-props был ключом / значением пара, то это может go в кавычки, и все будет хорошо. Но поскольку это часть структуры, я не знаю, что нужно делать.

1 Ответ

1 голос
/ 03 марта 2020

Вы можете использовать строки как «методы», и строитель создаст из них ваши промежуточные структуры:

import groovy.yaml.YamlBuilder

def b = new YamlBuilder()

b.execution {
    "set-props"(
        url: "..."
    )
}

println b

Или продолжить на вашем примере: вы можете создать всю карту и использовать в качестве аргумента, где вы хотите иметь этот контент.

def setprops=["set-props": [url:"..."]]
b.execution(setprops)

Оба результата приводят к:

---
execution:
  set-props:
    url: "..."

Обратите внимание, что первая версия вкладывается через пропущенные замыкания, а затем переходит в карту. Второй бит просто передает вложенную карту.

...