Executa um bloco de código

Sintaxe

Eval( < bBloco >, [ xVariavel ] )

Parâmetros

Nome

Tipo

Descrição

Obrigatório

Referência

bBloco

bloco de código

Indica o bloco de código que será avaliado.

X

 

xVariavel

qualquer

Indica o argumento que será avaliado no bloco de código.

 

 

Retorno

Nome

Tipo

Descrição

xRetorno

qualquer

Retorna o valor da última expressão do bloco de código.

Exemplos

Exemplo 1
// Exemplo 1
#DEFINE CRLF Chr(13)+Chr(10)
#DEFINE TAB  Chr(09)
User Function Exemplo()
  Local bBloco := {|nArg| nArg + 1 }
  Local cMensagem := ""
  Local nCount := 0
  //+----------------------------------------------------------------------------+
  //|Exemplifica o uso da função Eval                                            |
  //+----------------------------------------------------------------------------+  
  cMensagem += "Antes de avaliar o bloco de código: "  + CRLF  
  cMensagem += TAB + "nCount = " + cValToChar(nCount)  + CRLF  
  nCount := Eval(bBloco, nCount)  
  cMensagem += "Depois de avaliar o bloco de código: " + CRLF  
  cMensagem += TAB + "nCount = " + cValToChar(nCount)
  //+----------------------------------------------------------------------------+
  //|Apresenta uma mensagem com os resultados obtidos                            |
  //+----------------------------------------------------------------------------+
Return MsgInfo(cMensagem, "Eval - Exemplo")
  
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Exemplo 2
//Este exemplo cria um bloco de código que incrementa um número e depois o avalia:
bBloco := { |nArg| nArg + 1 } 
EVAL(bBloco, 1)                               // Resulta: 2

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Exemplo 3
//Este exemplo demonstra como um bloco de código pode ser compilado em tempo de execuçao utilizando-se o operador macro (&):
bBloco := &("{ |nArg| nArg + 1 }") 
EVAL(bBlock, 1)                               // Avalia o bloco

Resultado do Exemplo

Abrangência

Microsiga Protheus 8.11 , Protheus 10 , TOTVS Application Server 10 , ByYou Application Server

  • Sem rótulos