Kovas, I'm just an end-user like yourself so I can't say anything about adding a bug for this. But I don't really see what the language / core library could do differently: the exception already says "wrong number of args (2) passed".
Cheers, Lauri On Wed, 19 Jan 2022 at 16:35, Kovas Palunas <[email protected]> wrote: > Ohhhh, I was under the impression that the function was a key function > returning a value that would be sorted on place of the real value. > sorted-map-by(-key) is how I read it. > > Any chance we could make a bug to add this exception? It would have saved > me a lot of time. > > On Wed, Jan 19, 2022, 8:27 AM Lauri Pesonen <[email protected]> wrote: > >> Hi Kovas, >> >> When I run your code in a Clojure repl (as opposed to CLJS), I get an >> exception: >> >> clojure.lang.ArityException: Wrong number of args (2) passed to: >> app.core-test/sort-map/fn--24334 >> >> And this is because you're the comparator that you pass to sorted-map-by >> is a 1-arity function: #(if (= % :input) "aaaaa" (name %))) >> >> The comparator will be called with two map entries as arguments so that >> the comparator can decide which one of them should be first, so your >> comparator function should do something with %1 and %2. But I can't really >> tell from the code what you're trying to do, so I'm not sure what the >> comparator should look like. >> >> Cheers, >> Lauri >> >> On Tue, 18 Jan 2022 at 14:15, Kovas Palunas <[email protected]> >> wrote: >> >>> Hey all, >>> >>> I think I've found a bug in `sorted-map-by`, as shown by the below code: >>> >>> ``` >>> (ns app.core-test >>> (:require >>> [cljs.test :refer (deftest is)] >>> [clojure.string :as st])) >>> >>> (prn *clojurescript-version*) ;; "1.10.914" >>> >>> (defn single-row [result-row] >>> {:input (:input result-row) >>> (keyword (st/join [(name (:biomarker result-row)) "-datapoints"])) >>> (:datapoints result-row)}) >>> >>> (defn sort-map [m] >>> ; Sort row so that :input is first, then put this rest in alphabetical >>> order >>> (into (sorted-map-by #(if (= % :input) "aaaaa" (name %))) m)) >>> >>> (defn get-per-input-row [same-input-results] >>> ; Calling sort-map twice here resolves the problem. >>> (sort-map (reduce merge (map single-row same-input-results)))) >>> >>> (defn make-per-input-results >>> [results] >>> (let [rows-by-input (group-by :input results)] >>> (map get-per-input-row (vals rows-by-input)))) >>> >>> (deftest test-bad-map-sorting >>> (is (= '({:input 1 :a-datapoints 5} >>> {:input 2 :a-datapoints 5} >>> {:input 3 :b-datapoints 5} >>> {:input 4 :b-datapoints 5}) >>> (make-per-input-results >>> [{:input 1 :biomarker :a :datapoints 5} >>> {:input 2 :biomarker :a :datapoints 5} >>> {:input 3 :biomarker :b :datapoints 5} >>> {:input 4 :biomarker :b :datapoints 5}])))) >>> ``` >>> >>> The testcase fails, when I would expect it to succeed. I tried posting >>> this on the cljs JIRA as a bug, but I don't have permission, so I thought >>> I'd post it here instead. Anyone want to try reproducing this and posting >>> on the JIRA if you can reproduce it? >>> >>> - Kovas >>> >>> -- >>> Note that posts from new members are moderated - please be patient with >>> your first post. >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "ClojureScript" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/clojurescript/7eedfcb0-acff-496c-b332-11589f7e9582n%40googlegroups.com >>> <https://groups.google.com/d/msgid/clojurescript/7eedfcb0-acff-496c-b332-11589f7e9582n%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- >> Note that posts from new members are moderated - please be patient with >> your first post. >> --- >> You received this message because you are subscribed to a topic in the >> Google Groups "ClojureScript" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/clojurescript/0-SJ0zmVX6c/unsubscribe. >> To unsubscribe from this group and all its topics, send an email to >> [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/clojurescript/CABgZr0s7iwQe8r%3DWXSDpx42bh7B_T8CURo61U7gonokrw9OJQw%40mail.gmail.com >> <https://groups.google.com/d/msgid/clojurescript/CABgZr0s7iwQe8r%3DWXSDpx42bh7B_T8CURo61U7gonokrw9OJQw%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> > -- > Note that posts from new members are moderated - please be patient with > your first post. > --- > You received this message because you are subscribed to the Google Groups > "ClojureScript" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/clojurescript/CAPzck%3DdBhpRrkTT65myd4vh8_X4jkoKXWeoXMt%3DKq4hMdPg0oQ%40mail.gmail.com > <https://groups.google.com/d/msgid/clojurescript/CAPzck%3DdBhpRrkTT65myd4vh8_X4jkoKXWeoXMt%3DKq4hMdPg0oQ%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > -- Note that posts from new members are moderated - please be patient with your first post. --- You received this message because you are subscribed to the Google Groups "ClojureScript" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/clojurescript/CABgZr0v1dRNfOKnndPSfGGM%2Bs6kcz509_HO%2B8eiU9yqfYbCL4A%40mail.gmail.com.
