в clojure.core.match этот пример хорошо работает во вложенной карте
(match [{:a {:b :c}}]
[{:a {:b nested-arg}}] nested-arg)
но при изменении key
на vector
возникает ошибка.
(m/match x
{:a {[:b :c] 1}}
:found
)
Разве это не [:b :c]
действительный ключ в карте clojure? Или это просто не будет работать в clojure.core.match
?
[:b :c]
, конечно, действительный ключ. Это ошибка, и о ней уже сообщалось, см. открытый вопрос.
И кажется, вы также не можете сопоставить карту с числами в качестве ключей:
(match/match [{:a 4}]
[{:a _}] :found)
=> :found
(match/match [{2 4}]
[{2 _}] :found)
Unexpected error (ClassCastException) macroexpanding match/match at ....
class java.lang.Long cannot be cast to class clojure.lang.Named (java.lang.Long is in module java.base of loader 'bootstrap'; clojure.lang.Named is in unnamed module of loader 'app')