Обработка преобразований типов, подобных этим, всегда является компромиссом при проектировании языка, и разные языки здесь делают разные компромиссы.
В частности, для языка Terraform философия «явный лучше, чем неявный»: идея в том, что в идеале тот, кто не знаком с конфигурацией и, возможно, не знаком даже с самой Terraform, может прочитать конфигурацию Terraform и сделать правильное предположение, так как к тому, что это значит, без необходимости запоминать много неявных правил преобразования.
С учетом сказанного, Terraform имеет автоматическое преобразование из строки в логическое значение, но не так, чтобы пустая строка преобразовывалась в false. Вместо этого строковые значения "true"
и "false"
отображаются на true
и false
соответственно, и любая другая строка вызовет ошибку преобразования.
Допуск преобразования этих конкретных строковых значений в основном мотивирован обратной совместимостью: до Terraform 0.12 не было без логического типа, и поэтому строки, содержащие эти значения, были единственным способом представления логических значений.
При проверке, является ли строка пустой, Terraform требует, чтобы ее явно записали как var.string == ""
или var.string != ""
, чтобы намерение было явным и понятным для читателя.
(Я один из авторов документации, связанной с вопросом, и автор комментария, связанной с вопросом. На момент написания статьи я работал над Terraform в HashiCorp.)