Ниже приведены некоторые философские обоснования.
Clojure предпочитает неизменность, а не изменчивость, и все источники изменчивости должны быть тщательно рассмотрены и названы. def
создает изменяемые переменные. Таким образом, идиоматическая Clojure, так или иначе, мало использует их, а также не хотела бы, чтобы было слишком легко создавать много изменяемых переменных без заботы (например, путем разрушения). Однако let
и деструктуризация аргументов функций создают неизменные привязки, поэтому Clojure упрощает создание этих привязок.
Вары, созданные def
, имеют глобальную область видимости. Поэтому вы должны тщательно назвать def
ed vars и держать их в числе. Разрушение def
сделало бы слишком легким создание многих def
без заботы. let
и деструктурирование аргументов функций, с другой стороны, создает локальные привязки с лексической областью, поэтому удобство деструктурирования не вызывает загрязнения имен.