Как я понимаю, ключевое слово let
локально связывает переменные со значениями (поддерживая какое-то соответствие шаблонов). Он получает два аргумента. Сначала это вектор с символом, который мы хотим связать, и значением, которое мы хотим связать. Затем появляется выражение, которое использует это значение.Уничтожение карты (с использованием ключевого слова let)
В этом примере первая переменная person
определяется:
user=> (def person {:name "Jabba" :profession "Gangster"})
#'user/person
теперь предположим, что мы хотим уничтожить карту с помощью let
функции:
user=> (let [{name :name} person] (str "The person's name is " name))
"The person's name is Jabba"
Почему это в [{name :name} person]
, :name
должен обязательно появляться после переменной name
? Это фактически не сработало бы:
user=> (let [{:name name} person] (str "The person's name is " name))
"The person's name is "
Почему такой порядок? Я думал, что карты могут быть определены в любом порядке:
user=> (def map1 {:a 1})
#'user/map1
user=> (def map2 {1 :a})
#'user/map2
возможно дубликат [ярлыки Clojure для карт уничтожения того] (http://stackoverflow.com/questions/31220308/clojure-shortcuts-for-destructuring-maps) – schaueho
'map1' и' map2' далеки от того, что: в 'map1', ключ': a', тогда как в последнем ключ - «1». В противном случае ваш вопрос будет выглядеть как дубликат https://stackoverflow.com/questions/31220308/clojure-shortcuts-for-destructuring-maps – schaueho