Bueno, el tema es que vengo de C++ y el tipo Variant me está volviendo loco, claro si estuviera en visual basic no script le pongo tipo a todas las variables y me movería en mi salsa, pero en vbscript todas las variables son de tipo variant :). Empecemos.
Scalar Variables and Array Variables.
Las variables de tipo escalar son las variables que solo pueden contener un valor y las variables de tipo vector son las variables que pueden contener mas de un valor. Esta explicación la he sacao de la web de msdn y me ha parecido bastante interesante.
Dim radio, lado ' son variables escalares, solo podrán contener un valor
Dim sup(2) ' podrá contener 3 valores, alojados en sup(0), sup(1) y sup(2)
Dim lstObjetos() ' podrá contener los valores que yo especifique con Redim lstObjetos(tamaño)
radio = 3
sup(0) = 1
sup(1) = 2
sup(2) = "jander crander"
Redim lstObjetos(2) ' tendremos ahora posibilidad de almacenar 3 valores.
Data Types
Pues mirando los tipos de datos de las variables me encontre con que, en VBScript las variables solo pueden ser de tipo vbVariant. O sea que las variables solo pueden de tipo variante (variables variantes?? como la ensaladilla :D).
Miremos el dicccionario, una variable es algo que puede cambiar de valor y una variante es algo que puede cambiar de forma, esto ayuda algo no?. Asi que, la variables son de tipo vbVariant pero tienen subtipo, que es el tipo del valor que se le asigno, real, entero, caracter…
Mixing
Todas las variables son variant, pueden contener un valor de cualquier tipo de datos. Si ademas, declaro una variable vector, el tipo de cada elemento sera variant :).
Where is the problem then?
En la función Array(list_args), esta maravillosa función devuelve una variable variant que contiene un vector de 3 elementos que no es lo mismo que un vector de 3 variants, aunque el acceso a cada elemento en ambas variables se realiza de la misma forma.
Dim variante, estatico(2)
variante = Array(2, 2, 2)
estatico = Array(2, 2, 2) ' esto falla porque los tipos no son el mismo, aunque es toneria
' porque realmete no deja asignar un vector a otro mediante el operador asignación, hay
' copiarlos campo a campo, entonces no te das cuenta de que tipo son.
PD: si no queda claro, es porque estas cosas es mejor explicarlas en una pizarra con ejemplos, asi que
siempre podeis venir a la academia :).