que j'ai une configuration de code comme celui ci-dessousArrêt de la méthode d'appeler: après
(defgeneric move (ship destination))
(defmethod move (ship destination)
;; do some fuel calculation here
)
(defmethod move :after ((ship ship) (dest station))
;; do things specific to landing on a station here
)
(defmethod move :after ((ship ship) (dest planet))
;; do things specific to landing on a planet here
)
Disons que maintenant, je veux déplacer mon vaisseau spatial à une station, mais les résultats de calcul de carburant à un montant négatif de carburant sur le navire (c'est-à-dire qu'il n'y en a pas assez pour le voyage).
Y a-t-il un moyen pour moi d'empêcher le qualificatif :after
d'être appelé sans nécessairement signaler une condition d'erreur? Si je n'arrête pas l'appel, le navire sera déplacé vers le nouvel emplacement sans aucune soustraction de carburant, ce qui interrompt essentiellement le jeu.
Vous devriez probablement déplacer le calcul de carburant vers une méthode ': AROUND' et transformer les deux méthodes': AFTER' en méthodes primaires. – jkiiski
@jkiiski comment puis-je arrêter les méthodes primaires d'être appelé? –
Vous ne l'appelez simplement pas. Les méthodes ': AROUND' doivent utiliser' CALL-NEXT-METHOD' manuellement pour appeler la méthode primaire, donc vous pouvez avoir quelque chose comme '(when (fuel-suffisant) (call-next-method))'. – jkiiski