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

приведет к ошибке компилятора.Почему паскаль запрещает одинаковое имя идентификатора для параметра метода и элемента данных класса?

Я думаю, что self или this указатель/ссылка достаточно хороша, для его ясности. Итак, каковы преимущества этого?

EDIT: Еще один вопрос: можете ли вы показать, какие языки используют эту политику?

ответ

3

Чтобы предотвратить столкновения имен, в которых имя параметра будет затенять член класса. Это просто не может произойти таким образом, и каждое имя недвусмысленно.

Помните, что Pascal является bondage-and-discipline language; они предназначены для предотвращения распространенных ошибок.

Другой вариант, чтобы предотвратить воспринимаемую проблемы является то, что Python делает: мандат квалификации членов экземпляра с this или self, так что вы имеют префикс каждый доступ к членам экземпляра с self.

Я не знаю ни одного другого языка с этим ограничением. Но некоторые особенности языка действительно уникальны; например, проверенные исключения.

+0

кажется «bondage-and-дисциплина», но он позволяет присваивать «целое» 'shortint'. – Jichao

+0

Ну, разработчики языка могут думать только о многих случаях. Вы не можете предотвратить их всех в компиляторе. Я думаю, что хорошая старая проблема с остановкой может сыграть в это :-) – Joey

+0

Я никогда не видел учебника Паскаля, описывающего язык как «Связывание и дисциплина». Походит на зависть с других языков :-) –