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
compartilhar
  • Que bacana! Eu já tentei fazer o JS virar ADVPL via diretivas, vou tentar dar uma olhada.

    Daniel Mendes   18 de Jan de 2021
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags teste foreach xcommand ppo ou faça a sua própria pergunta.