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
函数只能捕获和处理运行时之前未知的数据访问导致的动态错误。它不会捕获与可以证明对任何输入都无效的表达式相关的错误,例如格式错误的资源引用。
警告
can
函数仅用于变量验证规则中的简单测试。虽然它在技术上可以接受任何类型的表达式并在配置中的其他地方使用,但我们建议不要在其他上下文中使用它。对于配置中其他地方的错误处理,建议使用 try
。
示例
> 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
,它尝试评估一系列表达式并返回第一个成功表达式的结果。