Size: a a a

Clojure — русскоговорящее сообщество

2021 June 24

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
хотя по мне такие варианты ничем не хуже
  (let [keys (get {:my-ns/keys [1 2 3]} (keyword "my-ns" "keys"))]
   keys)
 (let [keys ((keyword "my-ns" "keys") {:my-ns/keys [1 2 3]})]
   keys)
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
Увы, здесь не деструктуризация ключей, а одного ключа... Хотя попробовать можно
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
вижу, щас поправлю
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
ну то есть вот так получается
  (let [{title (keyword "my-ns" "title")
        name (keyword "my-ns" "name")
        etc (keyword "my-ns" "etc")} {:my-ns/title "title"}]
   [title name etc])
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
по любому символ для именования в явном виде должен быть
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
Интересно, а это в макрос можно как-то?
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
Я ещё не макросил...
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
Можно канеш, но это будет over-engineering.
Ты запилишь макрос (за час-другой), вставишь его в три места в коде. Может даже переиспользуешь в четвёртый раз через пару месяцев, если не забудешь к тому времени, что запилил его.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
(let [m #:my-ns{:title "title" :name "name" :etc "etc"}
       my-ns "my-ns"
       kws [:title :name :etc]
       [title name etc] ((apply juxt (map #(keyword my-ns (name %)) kws)) m)]
   [title name etc])
=> ["title" "name" "etc"]
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
через rename-keys должно получиться компактнее.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
да как-то никто с проблемой динамической деструктуризации не сталкивается 😊
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
Что со мной не так? Третий раз уже...
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Показал бы больше кода, может что и посоветовали бы. Но динамические кейворды в рантайме вообще как-то не айс.
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
Минут через 30 покажу
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
(let [m {:my-ns1/title "title" :name "name" :etc "etc"}
       m (clojure.set/rename-keys m {:my-ns1/title :title
                                     :my-ns2/title :title})
       {:keys [title name etc]} m]
   [title name etc])
=> ["title" "name" "etc"]
источник

MB

Mikhail Beliansky in Clojure — русскоговорящее сообщество
Скажите, а что более идиоматично и здраво, подавать в функцию несколько параметров, или деструктурировать одну мапку? Типа:

(defn get [token url endpoint])

или

(defn get [{:keys [token url endpoint]}]
источник

A

Andrey in Clojure — русскоговорящее сообщество
в первом случае 3 обязательных параметра, во втором в мапке может не оказаться чего-то
источник

A

Andrey in Clojure — русскоговорящее сообщество
в первом конечно тоже нил прилететь может
источник

A

Andrey in Clojure — русскоговорящее сообщество
зависит мне кажется от контекста
источник

A

Andrey in Clojure — русскоговорящее сообщество
если это дело имеет смысл как мапка, нопример это соединение, которым ты туда сюда бросаешься или хранишь/получаешь где-то, то лучше мапкой. Если это one-time штука, то строить мапку перед передачей в функцию смысла не вижу большого
источник