Definiuję funkcję, która przyjmuje dwa parametry - mapę i klucz. Kluczem jest wymieniony z rozkładu parametru mapadefn vs. let z uwzględnieniem dekompozycji
(defn myfunc [{v k} k]
v)
gdy zgłoszę:
(myfunc {:a 10} :a)
Nieoczekiwanie produkuje oczekiwany wynik: 10
Podobnie rzecz na let:
(let [{v k} {:a 10} k :a] v)
kończy się niepowodzeniem, ponieważ k nie jest zdefiniowany w moment, kiedy oceniana jest pierwsza część.
Moje pytanie brzmi: dlaczego dekompozycja wewnątrz parametrów funkcji zachowuje się inaczej w porównaniu do dekompozycji w wyrażeniach let?
Nasuwa się pytanie, czy taka różnica nie powinna być traktowana jako błąd lub jako element ... – aav
Powiedziałbym jeśli wie się, że destrukturyzacja dzieje się wewnątrz ciała funkcji, nie jest to zaskakujące, a więc nie błąd. Ale myślę, że ten fakt powinien być lepiej wyjaśniony w odpowiednich miejscach - jeśli dobrze pamiętam, na przykład Joy of Clojure naprawdę się w to nie mieści. – Paul
co jest interesujące (ale nie zaskakujące), że jego nie będzie działać: (defn myfunc [{v k} {k: k1}] v) – aav