Почему Паскаль запрещает одно и то же имя идентификатора для параметра метода и члена данных класса? - PullRequest
0 голосов
/ 15 января 2010
type
    TPerson = class(TObject)
        name : string;
        constructor create(name : string);
    end;

вызовет ошибку компилятора.

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

РЕДАКТИРОВАТЬ : Еще один вопрос, не могли бы вы показать, какие еще языки используют эту политику?

1 Ответ

3 голосов
/ 15 января 2010

Для предотвращения конфликтов имен, когда имя параметра будет затенять члена класса. Такого просто не может быть, и каждое имя однозначно.

Помните, что Паскаль является языком дисциплины и дисциплины ; они предназначены для предотвращения распространенных ошибок.

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

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

...