Question

I'm learning protocols in Clojure and I came across this error for the following code:

CompilerException java.lang.IllegalArgumentException: No single method: valores_BANG_ of interface: gangnam.core.Legi found for function: valores! of protocol: Legi, compiling:(NO_SOURCE_PATH:1:1)

Everything was working wonderfully until I tried to add seven+ methods to the protocol (valores! below). So I copied valores into valores! to make absolutely sure I was using the same code, except for the ! at the end, and it doesn't work. I also tried swapping it out for a different name (dele).

Then I remembered that I recently ran lein install and when I run lein install again, that seems to fix the problem. Any idea why this might be happening?

(defprotocol Legi
  (lege [self] [self key])
  (carpe! [self] [self key] [self key val])
  (muta!* [self key val])
  (juga! [from label to])
  (claves [self])
  (valores [self])
  (valores! [self]))

(extend-protocol Legi
  Iterable
  (lege
    ([self]
      (for [elm self]
        (lege elm)))
    ([self key]
      (for [elm self]
        (lege elm key))))
  (carpe!
    ([self]
      (for [elm self]
        (carpe! elm)))
    ([self key]
      (for [elm self]
        (carpe! elm key)))
    ([self key val]
      (for [elm self]
        (carpe! elm key val))))
  (muta!*
    [self key val]
    (doall (for [elm self]
      (muta!* elm key val))))
  (juga! [from label to]
    (for [elm from]
      (juga! elm label to)))
  (claves [self]
    (for [elm self]
      (claves elm)))
  (valores [self]
    (for [elm self]
      (valores elm)))
  (valores! [self]
    (for [elm self]
      (valores elm)))
  Element
  (lege 
    ([self]
      (into {} (for [k (.getPropertyKeys self)]
                 [(keyword k) (lege self k)])))
    ([self key]
      (-> self (.getProperty (name key)))))
  (carpe!
    ([self]
      (for [k (.getPropertyKeys self)]
        (carpe! self k)))
    ([self key]
      (let [prop (lege self key)]
        (res
          (-> self (.removeProperty (name key))))
        prop))
    ([self key val]
      (let [prop (lege self key)]
        (if (= val prop)
          (carpe! self key)))))
  (muta!* [self key val]
    (res
      (let [key (name key)]
        (.setProperty self key val)
        self)))
  (juga! [from label to]
    (when (and from to)
      (res
        (.addEdge *g*
          nil from to (name label)))))
  (claves [self]
    (-> self .getPropertyKeys))
  (valores [self]
    (-> self lege vals))
  (valores! [self]
    (-> self lege vals)))
Was it helpful?

Solution

lein clean should solve this for you.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top