Versão atual:

Variável Local após comandos executáveis

Olá,

Estava realizando alguns testes (nada para produção ou cliente, apenas estudo) tentando realizar a criação de um #xcommand para simular um FOREACH em AdvPL. Entretanto, não é possível realizar a criação de variáveis locais após comandos executáveis (isso já vem do Clipper acredito: Clipper Error Messages) logo, não é possível abstrair a necessidade de informar o INDEX.

Lembrando que já existe funcionalidade semelhante no projeto xHarbour: FOR EACH xHarbour

Se alguém tiver alguma ideia para contribuir neste teste, agradeço!

Exemplo:

#include 'totvs.ch'

// Comando para criar o for e atribuir valor na variavel passada
#xcommand FOREACH <varname1> IN <varname2> INDEX <varname3> =>; 
    For <varname3> := 1 To GetLen(<varname2>);;
    <varname1> := <varname2>\[<varname3>\]

// função Len é blacklisted na geração do PPO. Utilizando essa função consigo
// contornar por enquanto
Static Function GetLen(aVar)
Return Len(aVar)

// função de teste
User Function TstForEach()

    Local nIndex as numeric
    Local nItem as numeric
    Local aTeste as array

    aTeste := {1, 2, 3}

    FOREACH nItem IN aTeste INDEX nIndex
        Conout(cValToChar(nItem))
    Next

Return

Versões (3):

Ver a versão formatada

Variável Local após comandos executáveis

Comentário

new question