List 元素存在



检查 List 元素存在的模板让我们验证元素存在而不需要知道它的索引位置。

这个例子用于演示 int 和 string 基本类型的 list:

check-basic.cue

X: [1, 2, 4]

#X: {
	for x in X {
		"\(x)": x
	}
}

#MustHave: [3]

#Xcheck: #X & {for x in #MustHave {"\(x)": x}}

cue eval check-basic.cue

#Xcheck: field not allowed: "3":
    ./check-basic.cue:3:5
    ./check-basic.cue:4:2
    ./check-basic.cue:4:13
    ./check-basic.cue:11:10
    ./check-basic.cue:11:15
    ./check-basic.cue:11:17
    ./check-basic.cue:11:38

这个例子用于演示 struct 类型的 list:

check-struct.cue

X: [{
	name: "a"
	val:  1
}, {
	name: "b"
	val:  2
}, {
	name: "c"
	val:  3
}]

#X: {
	for x in X {
		"\(x.name)": x
	}
}

#MustHave: ["b"]

#Xcheck: #X & {for x in #MustHave {"\(x)": _}}

如果你想要检查 struct 有特定的结构,你可以用 _ 替换定义,

更好的方法是在原始 list 中就进行定义。

一些注意事项:

  • 需要 list 的 key 不重复
    • 如果你不关注重复的 key 有不同的值,可以使用 true 或 任意值(_)代替。
  • Associative Lists 实现之后,这个模板就会改变。
我们绝不会将你的邮箱分享给任何人。
2022 Hofstadter, Inc