Página 1 de 1

como saber c uma variavel exite numa funcao em tempo de exec

Enviado: 18 Out 2007 18:40
por juniorcamilo
Amigos c um funcao tipo:

Código: Selecionar todos

 Function TESTE(a,b)
Local a, b
......
if a == b
   a := cvar
else
   b := cvar
endif
? cVar
? a
? b
.......
return .t.
a variavel 'cvar' nao esta declarada em uma chamada a esta funcao mas em outras chamada de outro lugar do prog. ela é declarada e 'private', tipo, aquela coisa, agente vai programando e programando e programando, ai c esquece de que em uma funcao de tempos atras criada tem uma variavel que so c usa em outra chamada, tem possibilidade d quando agente c deparar com 'variavel nao existe' colocar um if tipo c ela nao esta declarada ai agente declara só para passar pela funcao?

Re: como saber c uma variavel exite numa funcao em tempo de

Enviado: 18 Out 2007 18:56
por Itamar M. Lins Jr.
juniorcamilo escreveu:Amigos c um funcao tipo:

Código: Selecionar todos

 Function TESTE(a,b)
//Local a, b ISSO não é necessário, já tem em cima
......
if valtype(cVar) = 'U' // undefined (não definida)
   return .f.
endif
if a == b
   a := cvar
else
   b := cvar
endif
? cVar
? a
? b
.......
return .t.
Saudações
Itamar M. Lins Jr.

Enviado: 18 Out 2007 19:04
por Maligno
O que eu usaria:

Código: Selecionar todos

function ExistVar(cName)
local lFound := .T.
local bError := ErrorBlock({|o|Break(o)})
begin sequence
    &cName := &cName
recover
    lFound := .F.
end
ErrorBlock(bError)
return lFound

Enviado: 18 Out 2007 19:17
por vailton
Se a variavel for PUBLIC ou PRIVATE e o valor diferente de NIL dá para usar:

Código: Selecionar todos

function ExistVar(cName)
return TYPE(cName) <> "U"

Enviado: 18 Out 2007 19:26
por Maligno
Aliás, em tempo: nunca uso isso e acho que o ideal é nunca precisar usar esse tipo de teste. Variável não declarada é erro de lógica, muito embora a linguagem permita, o que na minha opinião, é um erro pior ainda.

Enviado: 18 Out 2007 20:05
por juniorcamilo
Maligno escreveu:Aliás, em tempo: nunca uso isso e acho que o ideal é nunca precisar usar esse tipo de teste. Variável não declarada é erro de lógica, muito embora a linguagem permita, o que na minha opinião, é um erro pior ainda.
com toda certeza erro puro da minha logica,,, so que infelismente as vezes por pressa e nao testar acaba fazendo muita coisa com uma unica funcao que pra sair caçando onde chama ela aqui e ali,, e foda... mas é foda mais ainda eu ver que a solucao é bem simples para isso,rsrsrsr

Obrigado a todos..

Enviado: 18 Out 2007 20:34
por Maligno
Já tem o ditado: "a pressa é inimiga da perfeição, e para o Muprhy a perfeição é como alho pro vampiro". :)))
Mas felizmente, como você disse, a solução é simples. Menos mal.

Enviado: 22 Out 2007 09:05
por ANDRIL
Tente colocar no inicio do seu programa a variavel que esta causando erro. Apenas defina ela como por exemplo, private cVar.