code is below.

Basically - if I extend a protocol on js/Object then I get an error when 
calling map on a map with integer keys.

Is this a bug or an error on my part?

Cheers

Dave

Results first:

If the extend-protocol and call to 'fred' is commented, ths console shows

"START" 
"one"      
([2 1])
"two"
"three"
([:2 1])
"four"
"five"
([2 1])
"done"

If the extend-protocol and call to 'fred' is uncommented I get:

"START" 
"one"      
([2 1])
"two"
"three"
([:2 1])
"four"
Uncaught Error: No protocol method ISeqable.-seq defined for type boolean: 
true



Code:

(ns ptest.main)


(defn map->js [m]
  (let [out (js-obj)]
    (doseq [[k v] m]
      (aset out (name k) v))
    out))


(defn log 
  ([x]
    (let [l (if (map? x) (map->js x) x)]
      (.log js/console l)
      x))
  ([m x]
    (do (log {:msg m :data x}) x)))

(defn log-str 
  ([x] (do (log (pr-str x)) x))
  ([m x] (do (log-str {:msg m :data x}) x)))


(log-str "START")

(defprotocol FRED
  (fred [this] "fred"))

(log-str "one")
(log-str 
  (map (fn [[k v]] [k v])
       {2  1}))

(extend-protocol FRED
  js/Object
  (fred [this] this))

(log-str "two")
(fred {})


(log-str "three")
(log-str 
  (map (fn [[k v]] [k v])
       {:2 1}))


(log-str "four")
(def a (doall (map (fn [[k v]] [k v])
                   {2 1})))
 
(log-str "five")
(log-str a)
  


(log-str "done")

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to