Quando sono utili in pratica i multimetodi?

2

Il Common Lisp Object System (CLOS) supporta dispatch multipli (multimetodi). Quando è questa una caratteristica utile nella pratica? Non sto solo cercando un esempio di funzionalità ipotetica che sarebbe più facile da implementare con la distribuzione multipla [1]. Sto cercando esempi di dove sia utile nel software reale, per qualsiasi valore reale che significa che sarebbe stato scritto per qualcosa di diverso da un semplice esempio.

[1] Nelle esercitazioni di programmazione, gli esempi sono inventati il più delle volte?

    
posta yakiv 25.07.2012 - 04:13
fonte

3 risposte

7
  • Ogni volta che usi il pattern visitatore.
  • Ogni volta che hai un operatore binario che deve inviare entrambi i parametri (ad esempio, il proiettile colpisce il bersaglio contro il proiettile l'astronave contro l'astronave colpisce il rock)
  • Ogni volta che desideri una specializzazione basata sul parametro (ad es. la tecnologia C ++ < bool > specialization, sistemi componenti in cui il componente può o non può esistere)
risposta data 25.07.2012 - 04:19
fonte
3

Un esempio facile da capire sarebbe l'aritmetica, dove potresti avere delle definizioni per

(più intero intero) (più intero float) (più intero float)

e così via.

Usato con attenzione, questo può essere un meccanismo meraviglioso. Usato con noncuranza..bene, hai capito cosa ti meriti.

    
risposta data 26.07.2012 - 07:11
fonte
0

Puoi usarli per setter generalizzati.

Invece di scrivere

(defmethod set-[specific-property] ((obj obj-type)) ())

per ogni setter [proprietà specifiche] che desideri, puoi utilizzare un'unica funzione generica da inviare:

(defmethod set- ((prop (eql :foreground)) (obj window)) ())

(defmethod set- ((prop (eql :background)) (obj t)) ())

ecc ...

    
risposta data 26.07.2012 - 04:54
fonte

Leggi altre domande sui tag