można schować typ zwracanej w protokoleCzy wskazanie typów powrotu w protokołach ma jakiś wpływ w Clojure?
(defprotocol Individual
(^Integer age [this]))
i kompilator uczyni Twoje metody są zgodne:
(defrecord person []
Individual
(^String age [this] "one"))
; CompilerException java.lang.IllegalArgumentException: Mismatched return type: age, expected: java.lang.Object, had: java.lang.String, ...
Ale nie trzeba uczcić typu podpowiedź:
(defrecord person []
Individual
(age [this] "one"))
(age (new person))
; "one"
Czy wskazówka typu ma jakikolwiek wpływ?
Jest kontynuacją Can you specify the return type of a method in a clojure defrecord?
Wskazówki dotyczące typów są niewłaściwie umieszczone. Powinien być podobny do '(age^String [this]" one ")'. Kompilator * nie * powoduje, że metody są zgodne. – Thumbnail
Mylące, ale na nazwę metody, jak to było to właściwe miejsce na wskazówkę typu w defrecord (patrz doc). Nie wiem, czy w defprotocol jest poprawne miejsce, ponieważ nie prymitywne wskazówki wydają się być ignorowane, a prymitywne wskazówki zdają się łamać zdolność do ich implementacji. W najlepszym razie usunąłem swoją odpowiedź jako spekulacyjną. –
@ A.Webb Dziękuję za twoje wysiłki. Jestem skłonny zostawić to pytanie jako drogowskaz ostrzegający otumanionych, włącznie z mną. – Thumbnail