Dúvida quando ao uso de métodos anônimos
Pessoal como estão?
Estou tentando utilizar métodos anônimos, vejam o exemplo abaixo.
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.
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
Curtidas 0
Respostas
Alex Constâncio
05/08/2013
Olá Johni
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:
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
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
Johni Marangon
05/08/2013
Olá Alex.
Muito obrigado pela sua resposta.
Abraço.
Muito obrigado pela sua resposta.
Abraço.
GOSTEI 0
Deivison Melo
05/08/2013
Estou encerrando o post como solucionado!
Abração a todos e bons códigos!!!
Abração a todos e bons códigos!!!
GOSTEI 0