跳至主要内容

can 函数

can 评估给定的表达式,并返回一个布尔值,指示该表达式是否在没有任何错误的情况下产生了结果。

这是一个能够捕获评估其参数时产生的错误的特殊函数。在大多数可以使用 can 的情况下,最好使用 try,因为它允许更简洁地定义失败表达式的回退值。

can 的主要目的是在编写 自定义变量验证规则 时将错误条件转换为布尔验证结果。例如

代码块
variable "timestamp" {
type = string

validation {
# formatdate fails if the second argument is not a valid timestamp
condition = can(formatdate("", var.timestamp))
error_message = "The timestamp argument requires a valid RFC 3339 timestamp."
}
}

can 函数只能捕获和处理运行时之前未知的数据访问导致的动态错误。它不会捕获与可以证明对任何输入都无效的表达式相关的错误,例如格式错误的资源引用。

示例

代码块
> local.foo
{
"bar" = "baz"
}
> can(local.foo.bar)
true
> can(local.foo.boop)
false

can 函数不会捕获与即使在动态表达式评估之前就可以证明无效的构造相关的错误,例如格式错误的引用或对尚未声明的顶级对象的引用。

代码块
> can(local.nonexist)

Error: Reference to undeclared local value

A local value with the name "nonexist" has not been declared.
  • try,它尝试评估一系列表达式并返回第一个成功表达式的结果。