Por que Pascal proíbe o mesmo nome de identificador para o parâmetro do Method e o membro de dados da classe?

StackOverflow https://stackoverflow.com/questions/2072883

  •  20-09-2019
  •  | 
  •  

Pergunta

type
    TPerson = class(TObject)
        name : string;
        constructor create(name : string);
    end;

acionaria o erro do compilador.

Eu acho que um self ou this O ponteiro/referência é bom o suficiente, para sua clareza. Então, quais são as vantagens de fazer isso?

EDITAR: Mais uma pergunta, você poderia mostrar quais são os outros idiomas que implantam essa política?

Foi útil?

Solução

Para evitar confrontos de nome em que o nome do parâmetro sombreia o membro da classe. Isso simplesmente não pode acontecer dessa maneira e todo nome é inequívoco.

Lembre -se de que Pascal é um linguagem de escravidão e disciplina; Eles foram projetados para tentar evitar erros comuns.

Outra opção para impedir o problema percebido é o que Python faz: exigir a qualificação dos membros da instância com this ou self para que você tenho Para prefixar todos os membros do membro de instância com acesso com self.

No entanto, não conheço nenhum outro idioma com essa restrição. Mas algumas características da linguagem são realmente únicas; Exceções verificadas, por exemplo, também são.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top