Array que não para de crescer
Enviado: 25 Ago 2015 17:41
Olá pessoal,
Somente gostaria de comentar com vocês um erro que estava ocorrendo aqui mas que nunca tinha percebido ele e fica de alerta aí pra turma:
Vejam o exemplo abaixo:
Cuidado ao passarem variáveis para as classes e dentro da classe, mudar o valor dela pois fora o valor também será mudado.
Sempre aprendendo....
Fica aí a dica,
T+
Rossine.
Somente gostaria de comentar com vocês um erro que estava ocorrendo aqui mas que nunca tinha percebido ele e fica de alerta aí pra turma:
Vejam o exemplo abaixo:
Código: Selecionar todos
#include "hbclass.ch"
function main
local a := { 1, 2 }
local b
local aVar
local aVar2
local oClass
// Usando com variáveis SIMPLES, funciona sem problemas.
cls
b := a
a := { 3, 4 }
? "Devera mostrar { 3, 4 }", hb_valtoexp( a )
? "Devera mostrar { 1, 2 }", hb_valtoexp( b )
// Usando CLASSES, o valor de AVAR é mudado, mas reparem que a variável
// que mandei na classe foi AVAR2
aVar := { "Um", "dois", "tres" }
aVar2 := aVar
? ""
? ""
? ""
? "Conteudo de aVar ANTES de executar a classe", hb_valtoexp(aVar)
oClass := TCLASS():New( aVar2 )
? "Conteudo de aVar DEPOIS de executar a classe", hb_valtoexp(aVar) // Vejam que mudou o valor do Avar
? "Conteudo de aVar2", hb_valtoexp(aVar2)
? ""
? ""
? "A solucao eh usar ACLONE()"
? ""
? ""
aVar := { "Um", "dois", "tres" }
aVar2 := aclone( aVar ) // Aqui está a charada
? "Conteudo de aVar ANTES de executar a classe", hb_valtoexp(aVar)
oClass := TCLASS():New( aVar2 )
? "Conteudo de aVar DEPOIS de executar a classe", hb_valtoexp(aVar) // Vejam aqui que o valor de Avar nao mudou
? "Conteudo de aVar2", hb_valtoexp(aVar2)
return NIL
//----------------------//
CLASS TCLASS
DATA aItems
METHOD New
ENDCLASS
METHOD New( aItems )
aadd( aItems, "Novo" )
return SELF
Sempre aprendendo....
Fica aí a dica,
T+
Rossine.