Question

Contexte

J'ai été la programmation en Java depuis quelques années maintenant. Et atm j'apprends quelque chose de totalement différent: Clojure. Là, le problème d'expression peuvent être résolus en utilisant Multiméthodes alors en Java, vous aurez besoin quelque chose comme le modèle de visiteur ou similaire quelque chose.

La question

Je l'ai lu sur Multiméthodes et suis tout à fait confondu avec la différence réelle avec la surcharge de méthode.

La seule différence I repéré jusqu'à présent qu'une multiméthode ne dépend pas du type d'exécution de l'objet sur lequel la méthode est appelée.

Était-ce utile?

La solution

est quand deux Surcharge ou plusieurs méthodes ont le même nom mais différente signature (différents types d'arguments, les nombres d'arguments). Est résolu statiquement Surcharge, en fonction uniquement sur les types de statiques des arguments. (L'interaction de surcharge et en remplaçant, en Java, par exemple, rend l'histoire un peu plus compliqué). Surcharge décide statiquement à une signature de méthode particulière. Puis lors de l'exécution, l'envoi dynamique choisira la méthode la plus appropriée avec cette signature.

Multiméthodes sont une collection de méthodes qui ont le même nom, le même nombre d'arguments, et chevauchement signatures de type. Chaque fois qu'un appel est fait à un multiméthode (en utilisant le nom du multiméthode), toutes les méthodes de la collection est considéré comme un candidat possible pour l'expédition. Le candidat précis est choisi en fonction des types d'exécution des arguments - la méthode la plus spécifique est sélectionné. Les types d'exécution réelle de tous les arguments sont utilisés pour déterminer lequel de fonctionner, qui diffère de l'envoi simple classique en Java, où seul le premier argument (la cible) de la méthode est utilisée pour déterminer quel organisme procédé est exécuté.

Autres conseils

En ce qui a comme ma compréhension va:

Multiméthodes sont une généralisation du polymorphisme de la méthode.

A multiméthode se compose de 2 parties

  1. Un nom

  2. A dispatch method: qui produira un dispatch value

Sur la base de cette valeur d'expédition, la méthode appropriée sera choisie. La surcharge est un cas particulier de Multiméthodes où la méthode d'expédition retourne le type statique comme une valeur d'expédition

En général, la méthode d'expédition peut être quoi que ce soit. Elle peut renvoyer d'autres valeurs que le type.

Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange
scroll top