Часто требуется изменить тип данных некоторых данных с одного типа на другой. Стандартная функция приведения — это двоичный оператор «$».
Три подхода используются для приведения из одного типа в другой (кроме строки) —
- Укажите желаемый тип данных по имени символа
- Укажите желаемый тип данных по его символу
- Укажите желаемый тип данных по его короткому значению.
Приведение целых чисел к плавающим
В следующем примере приведения целых чисел к плавающим, все три различных способа приведения эквивалентны —
q)a:9 18 27 q)$[`float;a] / Specify desired data type by its symbol name, 1 st way 9 18 27f q)$["f";a] / Specify desired data type by its character, 2 nd way 9 18 27f q)$[9h;a] / Specify desired data type by its short value, 3 rd way 9 18 27f
Проверьте, все ли три операции эквивалентны,
q)($[`float;a]~$["f";a]) and ($[`float;a] ~ $[9h;a]) 1b
Приведение строк в символы
Приведение строки к символам и наоборот работает немного по-другому. Давайте проверим это на примере —
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
Попытка привести строки к символам с использованием ключевых слов `symbol или 11h потерпит неудачу с ошибкой типа —
q)b "Hello" "World" "HelloWorld" q)`symbol$b 'type q)11h$b 'type
Приведение строк в не-символы
Преобразование строк в тип данных, отличный от символа, выполняется следующим образом:
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
Таким образом, для приведения всей строки (списка символов) к одному атому типа данных x необходимо указать заглавную букву, представляющую тип данных x, в качестве первого аргумента оператора $ . Если вы укажете тип данных x любым другим способом, это приведет к тому, что приведение будет применено к каждому символу строки.