Q Language - Type Casting
Spesso è necessario modificare il tipo di dati di alcuni dati da un tipo a un altro. La funzione di casting standard è "$"dyadic operator.
Vengono utilizzati tre approcci per eseguire il cast da un tipo a un altro (ad eccezione della stringa):
- Specificare il tipo di dati desiderato tramite il nome del simbolo
- Specificare il tipo di dati desiderato in base al suo carattere
- Specificare il tipo di dati desiderato tramite il valore breve.
Casting di numeri interi in float
Nel seguente esempio di casting di interi in float, tutti e tre i diversi modi di casting sono equivalenti:
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
Controlla se tutte e tre le operazioni sono equivalenti,
q)($[`float;a]~$["f";a]) and ($[`float;a] ~ $[9h;a])
1b
Casting di stringhe in simboli
Il cast di stringhe in simboli e viceversa funziona in modo leggermente diverso. Controlliamolo con un esempio:
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
Il tentativo di eseguire il cast di stringhe a simboli utilizzando le parole con chiave `symbol o 11h fallirà con l'errore di tipo -
q)b
"Hello"
"World"
"HelloWorld"
q)`symbol$b
'type
q)11h$b
'type
Casting di stringhe a non simboli
Il cast di stringhe in un tipo di dati diverso dal simbolo viene eseguito come segue:
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
Quindi per lanciare un'intera stringa (l'elenco di caratteri) a un singolo atomo di tipo di dati x richiede di specificare la lettera maiuscola che rappresenta il tipo di dati x come primo argomento di $operatore. Se specifichi il tipo di dati dix in qualsiasi altro modo, il cast viene applicato a ciascun carattere della stringa.