Página 1 de 1
Cuidado ao declarar variáveis com M->
Enviado: 30 Mar 2021 15:29
por JoséQuintas
Código: Selecionar todos
MEMVAR a
PROCEDURE Main
PRIVATE a := 20
Teste()
Inkey(0)
FUNCTION Teste()
LOCAL a := 10
? m->a
? a
RETURN Nil
Resultado na tela:
20
10
Usar variável com m-> não é a mesma coisa que declarar variável.
m-> é pra variáveis PRIVATE.
Interessante isso....
Cuidado ao declarar variáveis com M->
Enviado: 30 Mar 2021 21:39
por asimoes
Na documentação diz:
MEMVAR
Declares PRIVATE or PUBLIC variables.
Cuidado ao declarar variáveis com M->
Enviado: 31 Mar 2021 08:06
por JoséQuintas
Sim MEMVAR é pra declarar variáveis PUBLIC e PRIVATE.
E m->variavel é justamente pra pegar valor de PUBLIC/PRIVATE.
Sempre pensei que m-> indicava qualquer tipo de variável, mas é só pra PUBLIC/PRIVATE.
Na compilação -w3 -es2 isso fica bem claro, porque m-> acaba sendo similar a declarar como memvar.
No caso de rotinas de LIB, por exemplo, colocar m-> em tudo que é variável pode ter resultados imprevisíveis.
Aqui uso alias pra aquivos, e somente pra arquivos. arquivo->campo
Variáveis deixo sem nenhuma indicação, sempre declarando LOCAL ou MEMVAR pras exceções.
E declaração FIELDS não uso. A única exceção é na indexação: index on field->campo TAG tatu
Na indexação funciona usar arquivo->campo, mas isso deixa preso ao ALIAS, e nunca se sabe se poderemos usar alias diferente.
Cuidado ao declarar variáveis com M->
Enviado: 31 Mar 2021 08:12
por JoséQuintas
Aqui mais claro:
Código: Selecionar todos
FUNCTION Main()
LOCAL a
a := 10
m->a := 20
? a
? m->a
inkey(0)
Retorna 10, 20
Cuidado ao declarar variáveis com M->
Enviado: 31 Mar 2021 08:15
por JoséQuintas
Código: Selecionar todos
FUNCTION Main()
LOCAL a
a := 10
? a
? m->a
inkey(0)
RETURN Nil
E aqui.... dá erro de variável não existe no m->a
definitivamente m->variavel indica explicitamente variável diferente de LOCAL.