|
Página 1 de 1
|
Autor |
Mensaje |
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Param
Buenos días!.
Quiero pasar un número indeterminado de arrays a una función cuyo argumento ( perdonar si me lio ahora por la mañana ) es ...
Luego de cada array averiguo el número de elementos que contiene cada uno y si hay diferencia entre estos, recorto los arrays
al número mínimo de elementos que tiene el array de menos elementos.
Pero lo cierto es que lo he intentado con Param y no recorta, siempre se queda igual...
Public Sub Main()
Dim paises As String[] = ["China", "India", "Estados Unidos", "Indonesia"]
Dim poblaciones As Integer[] = [1391, 1364, 327, 264]
Dim importaciones As String[] = ["Arroz", "Trigo", "Petroleo"]
Agrupar(paises, poblaciones, importaciones)
End
Public Function Agrupar(...)
Dim aelementos As New Variant[]
Dim i As Integer
Dim minnumelementos As Integer
minnumelementos = Min(Param[0].count, Param[1].Count)
For i = 2 To Param.Max
Print Param[i].Count
minnumelementos = Min(minnumelementos, Param[i].Count)
Next
For Each aelementos In Param
aelementos.Resize(minnumelementos)
Next
Stop
End
¿ No se supone que al variar aelementos estoy variando el array original de Param ?.
¿ No es una referencia ?.
De principio la función ahora mismo solo recorta, luego la iré ampliando.
Por ejemplo, en este caso debe dar que el número mínimo es de 3 elementos.
Tanto Indonesia de países como el número de habitantes de Indonesia deberían desaparecer de los arrays,
de Param y de los array s originales. Pero al revisar el contenido de Param, sigue igual...
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#1 Jueves, 07 Marzo 2019, 10:53 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Param
En este ejemplo funciona pero no uso Param.
Otra forma más manual.
Public Sub Main()
Dim varios As String[][] = [["China", "India", "Estados Unidos", "Indonesia"], ["100", "200", "300", "400"]]
'Otra forma más manual
varios[0].Resize(3)
varios[1].Resize(3)
Stop
End
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#2 Jueves, 07 Marzo 2019, 13:46 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Param
La solución.
Si yo no puedo decir:
Ya que los tipos nativos no se pueden instanciar.
¿ Cómo es que esto es valido ?.
¿ Por ser un array de un tipo nativo ?
Parece que va un trecho de Variant a Variant[]
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Jueves, 07 Marzo 2019, 14:08; editado 1 vez
|
#3 Jueves, 07 Marzo 2019, 14:05 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Param
Variant[] es una clase, no un tipo nativo.
=================== No podemos regresar
|
#4 Jueves, 07 Marzo 2019, 19:44 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Param
Algo curioso de Variant es que puede admitir valores de distintos tipos.
Podría contener un array pero no admite los métodos de un array como puede ser la clase Variant[] que contiene un array de valores Variant.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#5 Viernes, 08 Marzo 2019, 00:45 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Param
Algo curioso de Variant es que puede admitir valores de distintos tipos.
Podría contener un array pero no admite los métodos de un array como puede ser la clase Variant[] que contiene un array de valores Variant.
Saludos
Las variables variant son entradas en una tabla (tabla de símbolos, creo recordar que la llamaban) de nombres de variablest, que a su vez apuntan a algún otro sitio de la memoria donde reside la "verdadera" variable con su tipo y todo. Por eso cuando declaras un variant, lo que haces es añadir una entrada a dicha tabla pero ni reservas espacio en la memoria ni sabes qué propiedades o tipo de valores contendrá hasta que eso se resuelva en tiempo de ejecución.
Son más lentas e imprecisas que las variables normales y su flexibilidad puede dar lugar a errores muy difíciles de depurar.
Sin embargo, un variant[] si es un tipo definido de la clase Array, por lo que todos sus propiedades, métodos y demás, ya existen en tiempo de diseño en cuanto Array, no en cuanto a su contenido que seguirían siendo Variants
Saludos.
=================== No podemos regresar
última edición por shordi el Viernes, 08 Marzo 2019, 11:46; editado 1 vez
|
#6 Viernes, 08 Marzo 2019, 11:45 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Param
Seguro que Vuott se anima a crear algún ejemplo de gambas que use punteros y variables tipo variant.
Es muy probable que tampoco le gusta el tipo Variant.
Por ejemplo:
- Cuando la variable Variant contiene solo un valor.
- Cuando la variable Variant contiene un array
Hay veces que tiramos del tipo Variant y si se puede, afinamos el tipo.
O siempre podemos construir una clase, estructura. Si es que fuera posible.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Viernes, 08 Marzo 2019, 13:50; editado 3 veces
|
#7 Viernes, 08 Marzo 2019, 13:48 |
|
|
|
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
|
|
|
|
|