J'utilise Pharo 5.0. Dans quelques cas, j'ai trouvé une limite ou peut-être un bug dans une classe Pharo existante (par exemple, quelque chose dans DBXTalk/Garage, ou Regex-Core). Je voudrais être en mesure de modifier un sélecteur ou un ensemble de sélecteurs existant dans une classe en dehors de mon propre projet et de faire cette partie de mon paquet.Comment remplacer un sélecteur existant dans une classe dans un autre paquet
J'ai trouvé plusieurs instructions sur la façon de créer un nouveau sélecteur dans une classe à l'extérieur et se déplacer que dans mon paquet (par exemple , comme le montre cette tutorial). C'est très cool. Mais dans certains cas, je veux réellement modifier un sélecteur existant dans la classe extérieure et avoir ma copie de ce sélecteur remplacer celle de la classe extérieure quand je l'utilise. Je ne souhaite pas modifier le package pré-fourni par un tiers ou Pharo existant.
Dans GNU Smalltalk, je peux le faire tout comme une partie normale de l'extension d'une classe. Par exemple:
Kernel.MatchingRegexResults extend [
at: anIndex [
"My updated version of the 'official' Kernel.MatchingRegexResults#at: selector"
"This is part of my package so overrides the 'official' version"
...
]
foo [
"My new foo selector"
]
]
Comment puis-je faire cela dans Pharo 5.0? J'ai fait pas mal de recherches mais je n'ai pas trouvé de moyen de le faire. Les mots "extend" ou "override" n'apparaissent pas dans le Pharo par l'exemple et dans les livres de Pharo.
Avez-vous essayé la commande * Move to package ... *? Il est disponible dans le menu contextuel de la liste de sélection. –
@LeandroCaniglia oui je l'ai fait. En fait, je l'ai mentionné dans ma question. Le déplacement fonctionne très bien si je veux créer un nouveau sélecteur pour une classe externe existante et déplacer ce nouveau sélecteur dans mon paquet. Mais cela ne fonctionne pas pour modifier/remplacer un sélecteur existant car il va déplacer l'implémentation de ce sélecteur dans mon paquet et le retirer de l'externe. Je ne veux pas supprimer le sélecteur surchargé du package externe, mais je souhaite simplement le remplacer. – lurker
Override signifie override ... vous réécrire la méthode, elle sera déplacée dans votre paquet, mais elle sera modifiée pour tout le système. Pharo n'a pas de système de modules, donc vous ne pouvez pas avoir différentes méthodes avec le même nom dans la même classe ... – EstebanLM