Q Language - Conversión de tipos

A menudo es necesario cambiar el tipo de datos de algunos datos de un tipo a otro. La función de transmisión estándar es "$"dyadic operator.

Se utilizan tres enfoques para convertir de un tipo a otro (excepto para la cadena):

  • Especifique el tipo de datos deseado por su nombre de símbolo
  • Especifique el tipo de datos deseado por su carácter
  • Especifique el tipo de datos deseado por su valor corto.

Conversión de enteros a flotantes

En el siguiente ejemplo de conversión de números enteros a flotantes, las tres formas diferentes de conversión son equivalentes:

q)a:9 18 27

q)$[`float;a]     / Specify desired data type by its symbol name, 1st way
9 18 27f

q)$["f";a]        / Specify desired data type by its character, 2nd way
9 18 27f

q)$[9h;a]         / Specify desired data type by its short value, 3rd way
9 18 27f

Compruebe si las tres operaciones son equivalentes,

q)($[`float;a]~$["f";a]) and ($[`float;a] ~ $[9h;a])
1b

Conversión de cadenas a símbolos

La conversión de cadenas a símbolos y viceversa funciona de manera un poco diferente. Comprobémoslo con un ejemplo:

q)b: ("Hello";"World";"HelloWorld")    / define a list of strings

q)b
"Hello"
"World"
"HelloWorld"

q)c: `$b                               / this is how to cast strings to symbols

q)c                                    / Now c is a list of symbols
`Hello`World`HelloWorld

Intentar convertir cadenas a símbolos usando las palabras clave `símbolo o 11h fallará con el error de tipo -

q)b
"Hello"
"World"
"HelloWorld"

q)`symbol$b
'type

q)11h$b
'type

Conversión de cadenas a no símbolos

La conversión de cadenas a un tipo de datos que no sea símbolo se realiza de la siguiente manera:

q)b:900               / b contain single atomic integer

q)c:string b          / convert this integer atom to string “900”

q)c
"900"

q)`int $ c            / converting string to integer will return the
                      / ASCII equivalent of the character “9”, “0” and
                      / “0” to produce the list of integer 57, 48 and
                      / 48.
57 48 48i

q)6h $ c              / Same as above
57 48 48i

q)"i" $ c             / Same a above
57 48 48i

q)"I" $ c
900i

Entonces, para convertir una cadena completa (la lista de caracteres) a un solo átomo de tipo de datos x requiere que especifiquemos la letra mayúscula que representa el tipo de datos x como primer argumento de la $operador. Si especifica el tipo de datos dex de cualquier otra forma, el resultado es que la conversión se aplica a cada carácter de la cadena.