İsteğe bağlı bir argümanı alan türümde bir işlev istiyorum. Bir türe ait olmayan işlevlerde isteğe bağlı argümanları başarılı bir şekilde kullandım, ancak bir protokol içinde çalışıp yazamadım.İsteğe bağlı argümanlar defprotocol'da nasıl kullanılır?
Benim başarısız deneme:
Clojure 1.4.0
user=> (defprotocol OptArg
(func [this a & b]))
OptArg
user=> (deftype Imp [] OptArg
(func [this a & b] (println a b)))
user.Imp
user=> (func (Imp.) 1 2)
CompilerException java.lang.IllegalArgumentException: No single method: func of interface: user.OptArg found for function: func of protocol: OptArg, compiling:(NO_SOURCE_PATH:5)
user=> (defn opt-arg [a & b] (println a b))
#'user/opt-arg
user=> (opt-arg 1 2)
1 (2)
nil
user=> (opt-arg 1)
1 nil
nil
user=>
çok teşekkürler. Clojure yeni başlayan biri olarak, hata mesajlarının bir anlamda anlamlı olmasını diliyorum. –
+1. Ancak, iyi bir çözümün, protokolün dışında * verinin * desteklendiğini ve bu işlevin protokolün kendisinde uygun işlev (ler) i çağırmasını sağlayan bir yöntem oluşturmak olduğunu eklemeye değer. – mikera