4

Clojure でプロトコルを学習していますが、次のコードでこのエラーに遭遇しました。

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)

プロトコルに7つ以上のメソッドを追加しようとするまで、すべてがうまく機能していました(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)))
4

1 に答える 1