CUE语言如何实现列表追加?实践遇嵌套问题求解决
解决CUE中列表追加出现嵌套结构的问题
你的代码核心问题是循环内错误地给params定义了带字符串键的对象结构,导致列表追加后出现嵌套格式。要实现扁平的列表追加,需要直接对目标列表字段进行操作,利用CUE的列表合并语法。
修正后的代码
t: #input uiSchema: {} #input: { _stages: [{ "id": 31, "jobs": [{ "name": "echo", "stepType": "execute_shell", }] }, { "id": 32, "jobs": [{ "name": "docker-build-push", "stepType": "docker_build_and_push", }] }] } spec: { params: [{ name: "my-container" },...] workspaces: [ { name: "git-credentials" }, ] } // 匹配到docker_build_and_push类型的job时,追加参数到spec.params for _, stage in t._stages { for job in stage.jobs { if job.stepType == "docker_build_and_push" { spec.params = spec.params + [{ name: "appended container" }] } } }
关键改动说明
- 移除了原代码中错误的
params: [ID=string]: {...}结构,这个结构会把params从列表转换成带字符串键的对象,直接导致后续追加操作产生嵌套。 - 直接通过
spec.params = spec.params + [...]的方式对原列表进行追加,CUE的+操作符对列表执行扁平合并,不会产生嵌套结构。 - 调整循环写法,逻辑更直接:遍历所有stage和job,匹配到目标类型后直接修改
spec.params字段。
执行结果
运行cue eval test.cue后,spec.params部分会输出你期望的扁平列表:
spec: { params: [ { name: "my-container" }, { name: "appended container" }, ] workspaces: [ { name: "git-credentials" }, ] }
内容的提问来源于stack exchange,提问作者gujiwork
相关产品推荐
相关产品推荐

