Fórum Dúvida quando ao uso de métodos anônimos #451014

05/08/2013

0

Pessoal como estã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

Johni Marangon

Responder

Posts

06/08/2013

Alex Constâncio

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:

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
Responder

Gostei + 0

06/08/2013

Johni Marangon

Olá Alex.

Muito obrigado pela sua resposta.

Abraço.
Responder

Gostei + 0

06/08/2013

Deivison Melo

Estou encerrando o post como solucionado!

Abração a todos e bons códigos!!!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar