ClojureDart icon indicating copy to clipboard operation
ClojureDart copied to clipboard

Port new 1.11 behavior for associative varargs

Open TiLogic opened this issue 3 years ago • 1 comments

I think this is related to issue #96.

Calling a variadic function that contains argument destructuring fails with the following exception: Unhandled Exception: Invalid argument(s): Index out of bounds

Example:

(defn one [& {:keys [a b]
              :or {a "a" b "b"}}]
  (dart:core/print (str a b)))

  (one) ;=> ab
  (one nil) ;=> ...Index out of bounds...
  (one {}) ;=> ...Index out of bounds...
  (one {:a "x"}) ;=> ...Index out of bounds...
  (one {:a "x" :b "y"}) ;=> ...Index out of bounds...


(defn two [a & {:keys [b c]
                :or {b "b" c "c"}}]
  (dart:core/print (str a b c)))
  
  (two "x") ;=> xbc
  (two "x" nil) ;=> ...Index out of bounds...
  (two "x" {}) ;=> ...Index out of bounds...
  (two "x" {:b "y"}) ;=> ...Index out of bounds...
  (two "x" {:b "y" :c "z"}) ;=> ...Index out of bounds...

TiLogic avatar Jun 13 '22 13:06 TiLogic

We haven't back ported clojure 1.11 handling of varargs map destructuring. Your code doesn't work in clojure 1.10. However (one :a "x") should work.

cgrand avatar Jun 13 '22 22:06 cgrand