Clojure “解除协议”;没有单一的方法”;在莱宁根,错误似乎是一个bug

Clojure “解除协议”;没有单一的方法”;在莱宁根,错误似乎是一个bug,clojure,leiningen,Clojure,Leiningen,我在Clojure中学习协议,在以下代码中遇到此错误: CompilerException java.lang.IllegalArgumentException:没有为函数:valores找到单独的方法:valores\u BANG\u接口:gangnam.core.Legi!协议:Legi,编译:(无源路径:1:1) 在我尝试向协议中添加七个以上的方法之前,一切都进行得非常顺利(valores!如下)。所以我把valores复制到valores以确保我使用的是相同的代码,除了在最后,它不起作用

我在Clojure中学习协议,在以下代码中遇到此错误:

CompilerException java.lang.IllegalArgumentException:没有为函数:valores找到单独的方法:valores\u BANG\u接口:gangnam.core.Legi!协议:Legi,编译:(无源路径:1:1)

在我尝试向协议中添加七个以上的方法之前,一切都进行得非常顺利(
valores!
如下)。所以我把
valores
复制到
valores
以确保我使用的是相同的代码,除了
在最后,它不起作用。我还尝试将它换成另一个名称(
dele

然后我记得我最近运行了
lein install
,当我再次运行
lein install
时,似乎解决了问题。知道为什么会这样吗

(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)))

lein clean
应该能帮你解决这个问题。

我无法告诉你这花了我多少时间,直到我知道是什么原因造成的!