2015-09-25 1 views
3

Débutant ici, en passant par "Pharo par l'exemple". Le livre mentionne un exemple de EllipseMorph new openInWorld aboutissant à un appel à Morph openInWorld, alors que EllipseMorph defaultColor est un message surchargé: comment puis-je le comprendre en utilisant le navigateur système ou autre chose?Comment rechercher quelle classe implémente une méthode dans Pharo?

La méthode de recherche habituelle trouve uniquement les correspondances dans la classe immédiatement sélectionnée. Est-il possible en général de rechercher quelle classe va répondre à (disons) Foo bar?

Mise à jour: Merci pour toutes les suggestions (Finder, Spotter); le débogueur est le plus révélateur des outils que j'ai déjà rencontrés!

+2

Je ne comprends pas complètement votre méthode, mais vous pouvez sélectionner un nom de méthode et appuyer sur cmd + m (ou ctrl + m sur Windows) et il vous montrera tous les implémenteurs affichés comme un arbre. – Uko

Répondre

4

Smalltalk offre beaucoup d'outils et de navigateurs qui peuvent vous aider. Si vous connaissez déjà le nom du message, vous pouvez:

  • utilisation spotter (Maj +Entrez) pour taper et voir tous les expéditeurs et les exécutants, et sélectionnez l'une pour le parcourir.
  • En regardant une méthode dans un navigateur, cliquez sur les petits triangles verts à gauche du nom de la méthode indiquant respectivement les implémentations en haut et/ou en bas de la hiérarchie pour y ouvrir un navigateur.
  • sélectionner le nom du message (presque) partout et saisissez CMD +M pour voir le i m plementors et CMD +N voir la SE n ders.

Dans ce cas, vous pouvez également taper EllipseMorph new openInWorld dans une aire de jeux et sélectionnez Debug-It dans le menu. Cela ouvrira un débogueur avec la sélection sur new. Si vous cliquez sur dans, la ligne supérieure devient EllipseMorph class(Behavior) new. Cela indique que le new de Behavior est utilisé ici. Si vous continuez à avancer avec dans (2 fois), vous verrez le changement à EllipseMorph(BorderedMorph) initialize. En suivant simplement la trace des messages envoyés, vous pouvez voir où tout est implémenté.

4

Pour ajouter à la réponse de Stephan (+1), l'un des moyens les plus simples, surtout si vous êtes nouveau sur Smalltalk et préférez utiliser l'interface graphique, est d'utiliser l'outil Finder. Juste à gauche Cliquez avec le bouton sur l'arrière-plan (l'équivalent de votre bureau dans votre image Pharo) et sélectionnez Tools > Finder:

Opening the Finder tool in Pharo

Ensuite, tapez le nom de la méthode, par exemple openInWorld dans le champ de recherche (assurez-vous « Sélecteurs » est sélectionné dans le menu déroulant à droite) et cliquez Entrez:

Using the Finder tool in Pharo

Vous pouvez ensuite parcourir toutes les méthodes contenant votre chaîne de recherche (notez qu'il est automatiquement une recherche générique) et les classes les implémentant.Le panneau en bas vous montre les implémentations sélectionnées, et le menu contextuel vous donne quelques options supplémentaires, par ex. parcourir la classe que vous avez sélectionnée.