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

은 컴파일러 오류를 유발합니다.왜 파스칼은 메서드의 매개 변수와 클래스의 데이터 멤버에 대해 동일한 식별자 이름을 사용할 수 없습니까?

나는 self 또는 this 포인터/참조가 명확성을 위해 충분하다고 생각합니다. 그럼, 그렇게하는 것의 이점은 무엇입니까?

EDIT :이 정책을 배포하는 다른 언어는 무엇입니까?

답변

3

매개 변수 이름이 클래스 멤버를 어둡게하는 이름 충돌을 방지하려면 다음과 같이하십시오. 이런 식으로 일어날 수 없으며 모든 이름이 모호합니다.

파스칼은 bondage-and-discipline language입니다. 그것들은 일반적인 오류를 방지하기 위해 고안되었습니다. 그래서 당신은 self와 모든 인스턴스 멤버 액세스를 접두사로이 것을 this 또는 self와 인스턴스 멤버의 자격을 의무화 :

인식 문제를 방지하기 위해 또 다른 옵션은 파이썬 않는 것입니다.

그 제한이있는 다른 언어에 대해서는 알지 못합니다. 그러나 일부 언어 기능은 참으로 독특합니다. 예를 들어 확인 된 예외도 있습니다.

+0

은'bondage-and-discipline '처럼 보이지만'integer'에서'shortint'까지 할당 할 수 있습니다. – Jichao

+0

글쎄, 언어 디자이너는 많은 경우에 대해서만 생각할 수 있습니다. 컴파일러에서 모든 것을 막을 수는 없습니다. 나는 좋은 오래된 중단 문제가 그것으로 나타날지도 모릅니다 :-) – Joey

+0

"Bondage and Discipline"이라고 쓰여진 Pascal 교과서를 보지 못했습니다. 다른 언어의 부러움처럼 들립니다 .-) –

관련 문제