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