Fórum Dúvida quando ao uso de métodos anônimos #451014
05/08/2013
0
Estou tentando utilizar métodos anônimos, vejam o exemplo abaixo.
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
i:= function (): Integer
begin
Result:= 1;
end;
end;
end.
Ao tentar compilar esse código ocorre o seguinte erro: [dcc32 Error] AppInit.pas(36): E2010 Incompatible types: 'Integer' and 'Procedure'
Alguém sabe me informar se é possível capturar um valor de uma função usando métodos anônimos de forma semelhante ao que estou tentando fazer.
Desde já agradeço a atenção.
Johni Marangon
Curtir tópico
+ 0Posts
06/08/2013
Alex Constâncio
A atribuição de um método anônimo somente pode ser feita para uma variável ou parâmetro com tipagem própria para este fim. No caso do teu exemplo, o código teria que sofrer uma pequena modificação:
type
TMeuAnonimo = reference to function: Integer;
procedure TForm1.Button1Click(Sender: TObject);
var
anonimo: TMeuAnonimo;
i: Integer;
begin
anonimo := function: Integer
begin
Result := 1;
end;
i := anonimo;
end;
Como você pode ver, o código anônimo foi "atribuído" (na verdade, é uma referência para este código que é atribuída) à variável anonimo que depois pôde ser utilizada como um método qualquer. Na verdade, trata-se de uma variação do tipo procedural, que já existia no Delphi e era usado para a implementação de eventos.
O que a linguagem tem agora é uma sintaxe que permite que esse tipo de construção apareça no meio do código.
Internamente, os métodos anônimos são implementados por meio de interfaces.
Alex
Gostei + 0
06/08/2013
Johni Marangon
Muito obrigado pela sua resposta.
Abraço.
Gostei + 0
06/08/2013
Deivison Melo
Abração a todos e bons códigos!!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)