Hombre, vectores independientes... si son 3 ó 4 los metes en variables con nombre, pero si son unos cuantos o el número va variando sí puede ser interesante agruparlos en un vector.
Pero es cierto que no es del todo cómodo, tienes que sacar el vector antes de acceder a algún elemento suyo, ya podían haber dejado concatenar el acceso a matrices, tipo
Ya que $a[1] devuelve un vector, debería poder añadírsele un acceso a vector, pero no, cosas del diseño del lenguaje.
¿Con estructuras de datos te refieres a tipo registros, como los struct de C? Pues efectivamente, como AutoIT no es tipado puedes meter en cualquier variable valores de cualquier tipo, así que tal como dices puedes meter en un vector cadenas, números, booleanos, otros vectores... ¡todo mezclado!
Se pueden hacer fichas bastante complejas, en ejemplo tonto:
Código: Seleccionar todo
Global CONST $noHijos=0 ;No sé cómo hacer un array vacío, así que me apaño con esto...
Global $juan, $ana, $pedro
$juan = _CreaPersona("Juan", 10, $noHijos)
$ana = _CreaPersona("Ana", 3, $noHijos)
Global $hijos[2] = [$juan, $ana]
$pedro = _CreaPersona("Pedro", 42, $hijos)
MsgBox(0, "INFO", _Nombre($pedro) & " tiene " & _NumHijos($pedro) & " hijos." & @CRLF & _
"Su hija pequeña se llama " & _Nombre(_Hijo($pedro, 2)) & " y tiene " & _Edad(_Hijo($pedro, 2)) & " años.")
Func _CreaPersona($nombre, $edad, $hijos)
Local $res[3] = [$nombre, $edad, $hijos]
Return $res
EndFunc
Func _Nombre($persona)
Return $persona[0]
EndFunc
Func _Edad($persona)
Return $persona[1]
EndFunc
Func _ListaHijos($persona)
Return $persona[2]
EndFunc
Func _Hijo($persona, $num)
Local $h = $persona[2] ;Habría que comprobar rangos
Return $h[$num-1]
EndFunc
Func _NumHijos($persona)
Return UBound($persona[2]) ;Con $noHijos UBound dará cero
EndFunc
¿Cómo crear arrays vacíos? Tipo
Global $a[0] = []
Por lo visto debe tener como mínimo un elemento, sería muy cómodo para arrays variables, con
UBound sabes cuántos elementos hay, pero no se puede dejar a cero, al menos
UBound en una variable no array da 0, pero también activa
@error, cosa que ignoro
Para ser la única estructura que da el lenguaje las matrices no están acabadas, no puedes por ejemplo usarlas directamente y hacer algo como:
tienes que pasar los hijos por una variable...
Estoy pensando que nos estamos saliendo del tema... ¿que no pondremos esto de las "estructuras" en otro post dedicado para ello? si alguien busca algo sobre estructuras/registros esto puede ayudar, y el post de "retornos múltiples" no es donde debería buscarse algo así...