2010-01-15 17 views
0
type 
    TPerson = class(TObject) 
     name : string; 
     constructor create(name : string); 
    end; 

déclencherait une erreur de compilation.Pourquoi pascal interdit-t-il le même nom d'identifiant pour le paramètre de la méthode et le membre de données de la classe?

Je pense qu'un pointeur/référence self ou this est assez bon, pour sa clarté. Alors, quels sont les avantages de le faire?

EDIT: Une question de plus, pourriez-vous montrer quelles sont les autres langues qui déploient cette politique?

Répondre

3

Pour éviter les conflits de noms où le nom du paramètre masque le membre de la classe. Cela ne peut tout simplement pas arriver de cette façon et chaque nom est sans ambiguïté.

Rappelez-vous que Pascal est un bondage-and-discipline language; ceux-ci sont conçus pour essayer d'éviter les erreurs courantes.

Une autre option pour éviter le problème perçu est ce que Python ne: mandater la qualification des membres d'instance avec this ou self afin que vous avez préfixer chaque accès membre d'instance avec self. Par contre, je ne connais pas d'autre langue avec cette restriction. Mais certaines fonctionnalités linguistiques sont en effet uniques; exceptions vérifiées par exemple sont aussi.

+0

semble 'bondage-and-discipline', mais il permet l'affectation de' integer' à 'shortint'. – Jichao

+0

Eh bien, les concepteurs de langage ne peuvent penser qu'à de nombreux cas. Vous ne pouvez pas les empêcher tous dans le compilateur. Je pense que le bon vieux problème d'arrêt pourrait jouer dans cela :-) – Joey

+0

Je n'ai jamais vu un manuel Pascal décrire la langue comme "Bondage et Discipline". Ça sonne comme l'envie d'autres langues :-) –