|
Página 1 de 1
|
Cuestión Sobre Método De Una Clase.Borra El Array Original
Autor |
Mensaje |
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Cuestión Sobre Método De Una Clase.Borra El Array Original
Hola Comunidad!.
Tengo una clase llamada baraja, la cual tiene un método llamado Cortar.
A este método le paso una array de cadena que contiene la baraja y el lugar por donde corto la baraja.
barajatemp1 contiene el contenido del array que se le ha pasado al método o función.
barajatemp2 es la baraja cortada que es la que devuelve el método.
Bien, hasta ahí todo correcto. Hasta ahora la aplicación me funciona dentro de lo que hice.
Mi cuestión va orientada a esto. El array que yo le paso también se "borra" y me ha
dejado un poco desconcertado, creía que era una copia (valor) con lo que trabaja y no el original.(referencia)
No es que sea un problema para la aplicación, pero si como duda.
Creo que el problema esta en usar New.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Lunes, 25 Febrero 2013, 12:17; editado 2 veces
|
#1 Lunes, 25 Febrero 2013, 12:14 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Cuestión Sobre Método De Una Clase.Borra El Array Original
Shell:
Podias poner la linea en el que llames al método y como esta definida la cadena que le pasas (con una propiedad, o public ... as string[] )
Saludos
|
#2 Lunes, 25 Febrero 2013, 12:49 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Cuestión Sobre Método De Una Clase.Borra El Array Original
Julio:
Ok.
Esto se encuentra en el formulario principal:
Esto es en la clase Baraja:
Y el método ya lo conoces.
Aquí tienes la clase carta.
Uso en la clase Baraja un constructor, tal que así:
Public Sub _new()
obaraja.palo = ["OROS", "COPAS", "ESPADAS", "BASTOS"]
obaraja.nomcarta = ["AS", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "SOTA", "CABALLO", "REY"]
obaraja.valorcarta = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 0.5, 0.5, 0.5]
End
Saludos.
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Lunes, 25 Febrero 2013, 13:04; editado 1 vez
|
#3 Lunes, 25 Febrero 2013, 13:01 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Cuestión Sobre Método De Una Clase.Borra El Array Original
Los arrays siempre se pasan por referencia. Si quieres pasar por valor utiliza el método .copy que llevan de por sí...
array2=arrayuno.copy()
o
mifuncion(miarray.copy())
Con esto último lo pasas por valor.
Saludos
|
#4 Lunes, 25 Febrero 2013, 13:08 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Cuestión Sobre Método De Una Clase.Borra El Array Original
Gracias Shordi,
Lo intentare como cuentas.
He enviado un privado a Jesús, no tengo ni idea que habrá ocurrido.
Pero fue muy extraño, cuando le di a enviar, algo había cambiado en la variable lugar, el tipo de esta variable se escribió mal.
Saludos.
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#5 Lunes, 25 Febrero 2013, 13:17 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Cuestión Sobre Método De Una Clase.Borra El Array Original
Shell:
Puedes encontrar un motón de métodos interesantes para trabajar con arrays de cadenas en este enlace:
http://gambasdoc.org/help/comp/gb/string[]?es
Saludos
Nota:
En enlace copialo y pegalo completo en el navegador, ya que no sale bien en el foro
última edición por jsbsan el Lunes, 25 Febrero 2013, 13:24; editado 1 vez
|
#6 Lunes, 25 Febrero 2013, 13:21 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Cuestión Sobre Método De Una Clase.Borra El Array Original
Gracias Julio.
Shordi:
Antes,Gambas2 solo pasaba por valor.Con la entrada de Gambas3 ya se pudo pasar por referencia.
Hice en su día un ejemplo en el blog, para el paso por referencia a un procedimiento.
PUBLIC SUB Form_Open()
Dim sNombre AS String
sNombre=”Jose Luis”
'Llamamos al procedimiento, pasándole como parámetro la variable sNombre
VerNombre(ByRef sNombre)
'Al salir del procedimiento ,mostramos el valor de la variable sNombre,
'comprobando que ha cambiado.
Message.info(“El valor del nombre es: “ & sNombre)
End
PUBLIC SUB VerNombre(ByRef sNom AS STRING)
'Vemos su valor original.
Message.info( “El valor original del parámetro es: “ & sNom)
'Cambiamos su valor y lo mostramos.
sNom=”Jose María”
Message.info(“El valor del parámetro se cambia a: “ & SNom)
END
Pero claro, se esta usando una sentencia añadida ByRef
Al final funciono como tu dijiste:
abarajamezclada = mibaraja.Barajar(aunabaraja.Copy())
Normal que se borrase el contenido del array.
Saludos.
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#7 Lunes, 25 Febrero 2013, 14:10 |
|
|
sebikul
Sebastian
Programador
Registrado: Julio 2012
Mensajes: 113
Edad: 30 Ubicación:
|
Re: Cuestión Sobre Método De Una Clase.Borra El Array Original
Los arrays siempre se pasan por referencia.
No solo los arrays, cualquier objeto SIEMPRE es pasado por referencia, ya que el argumento (la variable pasada) es un puntero a la memoria del objeto y no el objeto en si. Es por eso que cuando el argumento es un objeto, el ByRef no es necesario.
|
#8 Miercoles, 27 Febrero 2013, 03:05 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Cuestión Sobre Método De Una Clase.Borra El Array Original
Efectivamente Sebikul, más razón que un santo.
|
#9 Miercoles, 27 Febrero 2013, 05:50 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|