1. Lists and List Functions
Helm 提供了一个简单的list类型,包含任意顺序的列表。类似于数组或切片,但列表是被设计用于不可变数据类型。
创建一个整型列表:
$myList := list 1 2 3 4 5
上述会生成一个列表 [1 2 3 4 5]。
Helm 提供了以下列表函数: append(mustAppend), compact (mustCompact), concat, first(mustFirst), has (mustHas), initial (mustInitial), last (mustLast), prepend (mustPrepend), rest (mustRest), reverse (mustReverse), seq, slice (mustSlice), uniq (mustUniq), until, untilStep, 和 without (mustWithout)。
1.1. first, mustFirst
获取列表中的第一项,使用 first。
first $myList 返回 1
first 有问题时会出错,mustFirst 有问题时会向模板引擎返回错误。
1.2. rest, mustRest
获取列表的尾部内容(除了第一项外的所有内容),使用rest。
rest $myList returns [2 3 4 5]
rest有问题时会出错,mustRest 有问题时会向模板引擎返回错误。
1.3. last, mustLast
使用last获取列表的最后一项:
last $myList 返回 5。这大致类似于反转列表然后调用first。
1.4. initial, mustInitial
通过返回所有元素 但 除了最后一个元素来赞赏last。
initial $myList 返回 [1 2 3 4]。
initial有问题时会出错,但是 mustInitial 有问题时会向模板引擎返回错误。
1.5. append, mustAppend
在已有列表中追加一项,创建一个新的列表。
$new = append $myList 6
上述语句会设置 $new 为 [1 2 3 4 5 6]。 $myList会保持不变。
append 有问题时会出错,但 mustAppend 有问题时会向模板引擎返回错误。
1.6. prepend, mustPrepend
将元素添加到列表的前面,生成一个新的列表。
prepend $myList 0
上述语句会生成 [0 1 2 3 4 5]。 $myList会保持不变。
prepend 有问题时会出错,但 mustPrepend 有问题时会向模板引擎返回错误。
1.7. concat
将任意数量的列表串联成一个。
concat $myList ( list 6 7 ) ( list 8 )
上述语句会生成 [1 2 3 4 5 6 7 8]。 $myList 会保持不变。
1.8. reverse, mustReverse
反转给定的列表生成一个新列表。
reverse $myList
上述语句会生成一个列表: [5 4 3 2 1]。
reverse 有问题时会出错,但 mustReverse 有问题时会向模板引擎返回错误。
1.9. uniq, mustUniq
生成一个移除重复项的列表。
list 1 1 1 2 | uniq
上述语句会生成 [1 2]
uniq 有问题时会出错,但 mustUniq 有问题时会向模板引擎返回错误。
1.10. without, mustWithout
without 函数从列表中过滤内容。
without $myList 3
上述语句会生成 [1 2 4 5]
一个过滤器可以过滤多个元素:
without $myList 1 3 5
这样会得到: [2 4]
without 有问题时会出错,但 mustWithout 有问题时会向模板引擎返回错误。
1.11. has, mustHas
验证列表是否有特定元素。
has 4 $myList
上述语句会返回 true, 但 has "hello" $myList 就会返回false。
has 有问题时会出错,但 mustHas 有问题时会向模板引擎返回错误。
1.12. compact, mustCompact
接收一个列表并删除空值项。
$list := list 1 "a" "foo" ""
$copy := compact $list
compact 会返回一个移除了空值(比如, "")的新列表。
compact 有问题时会出错,但 mustCompact 有问题时会向模板引擎返回错误。
1.13. slice, mustSlice
从列表中获取部分元素,使用 slice list [n] [m]。等同于 list[n:m].
- slice $myList 返回 [1 2 3 4 5]。 等同于 myList[:]。
- slice $myList 3 返回 [4 5]等同于 myList[3:]。
- slice $myList 1 3 返回 [2 3]等同于 myList[1:3]。
- slice $myList 0 3 返回 [1 2 3]等同于 myList[:3]。
- slice 有问题时会出错,但 mustSlice 有问题时会向模板引擎返回错误。
1.14. until
until 函数构建一个整数范围。
until 5
上述语句会生成一个列表: [0, 1, 2, 3, 4]。
对循环语句很有用: range $i, $e := until 5。
1.15. untilStep
类似until, untilStep 生成一个可计数的整型列表。但允许你定义开始,结束和步长:
untilStep 3 6 2
上述语句会生成 [3 5],从3开始,每次加2,直到大于等于6。类似于Python的 range 函数。
1.16. seq
原理和bash的 seq 命令类似。
1 单个参数 (结束位置) - 会生成所有从1到包含 end 的整数。
2 多个参数 (开始, 结束) - 会生成所有包含start 和 end 的整数,递增或者递减。
3 多个参数 (开始, 步长, 结束) - 会生成所有包含 start 和 end 按 step递增或递减的整数。
seq 5 => 1 2 3 4 5
seq -3 => 1 0 -1 -2 -3
seq 0 2 => 0 1 2
seq 2 -2 => 2 1 0 -1 -2
seq 0 2 10 => 0 2 4 6 8 10
seq 0 -2 -5 => 0 -2 -4