Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Problema son manejo de propiedades array en clases
Message
De
31/08/1998 10:49:52
 
 
À
29/08/1998 10:02:22
Information générale
Forum:
Visual FoxPro
Catégorie:
Classes - VCX
Divers
Thread ID:
00130736
Message ID:
00131521
Vues:
18
>>>>Tengo una clase Custom "manejo" en Visual Foxpro con una propiedad array llamada "lista", he intentado utilizar esta propiedad en un metodo de la clase pero cuando lo recibo en el procedimiento el parametro con que recibo a "lista" ya no es reconocido como un array si no como un caracter.
>>>>
>>>>En detalle estoy realizando lo siguiente:
>>>>
>>>>defino propiedad lista como manejo.lista(1)
>>>>dimension this.lista(3)
>>>>this.lista(1)="uno"
>>>>this.lista(2)="dos"
>>>>this.lista(3)="tres"
>>>>sarta=""
>>>>this.VECTORASARTA(this.lista,sarta)
>>>>
>>>>
>>>>** metodo VECTORASARTA
>>>>** traslada contenido del vector a una sarta
>>>>parameters vector,sarta,longitud
>>>>tempo=space(2)
>>>>longitud=0
>>>>for i=1 to alen(vector,1)
>>>> m.car=vector(i)
>>>> tempo=tempo+m.car
>>>>endfor
>>>>sarta=substr(tempo,3)
>>>>
>>>>** se genera el error
>>>>--> vector no es una array
>>>>
>>>>En estos momentos solucione el problema de la siguiente forma:
>>>>
>>>>=ACOPY(THIS.lista, VECTOR01)
>>>>DO vectorasarta WITH VECTOR01 , sarta
>>>>
>>>>esta forma funciona pero quisiera saber cual es el error en la forma 1;
>>>
>>>Jorge:
>>>
>>>Debes saber que cuando quieres pasar un array como parámetro de una función definida por el usuario o un método que hayas creado para un objeto debes pasarlo por valor es decir que debes poner una "@" justo antes del nombre del array como sigue:
>>>
>>>this.VECTORASARTA(@this.lista,sarta)
>>>
>>>Aunque no lo he probado estoy seguro que eso solucionará tu problema. Si omites poner la arroba antes del nombre el método asumirá que le envías como parámetro una variable, es por eso que te ocurre que lo reconoce como una variable de tipo carácter.
>>>
>>>Saludos.
>>El uso de '@' es para pasar parametros por referencia, que en pocas palabras significa pasar la direccion de memoria de la variable (o arreglo) en lugar de los valores. De esta manera cualquier cambio hecho en la funcion o procedimiento ejecutado se refleja en el codigo que hizo la llamada. El ejemplo del mensaje original trata de pasar el arreglo por valor.
>>Espero que sea de ayuda..
>>J.Crescencio
>
>
>Lo que explicas está bien pero en FPD, FPW y VFP la única forma de enviar un array entero como parámetro de un UDF es anteponiéndole una '@' al nombre del arreglo, naturalmente estás enviando el parámetro array como referencia.

En mi mensaje trataba de aclarar que el uso de @ pasa parametros por referencia y no por valor, como lo escribiste en tu respuesta. Alguien mas ya habia dado la solucion al problema.
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform