Преобразование типов
Несмотря на динамическую типизацию языка, если тип переменной указан явно, то автоматическое приведение типов не выполняется, и чтобы присвоить переменой значение не совместимого типа, требуется его явное преобразование.
Так как символьные названия типов относятся к деталям реализации, то явное преобразование в конкретный тип данных производится с помощью вызова функции с именем типа, т.е. :Bool(), :StrWide(), :Int64() и т.д.
Примеры:
Строки и тензоры
# Создать тензор из строки широких символов с автоматическим выводом типа
#(тип Int32 будет на системах с Linux, а под Windows тип тензора будет Int16)
> tstr := :Tensor("Тест");
[1058, 1077, 1089, 1090,]:Int32
# Тоже самое, но тензор заданной размерности
> t2 := :Tensor[2,2]("Тест");
[
[1058, 1077,], [1089, 1090,],
]:Int32
# Создать символьную строку из тензора
> :StrWide(tstr)
Тест
# Изменить тип данных тензора без изменения размерности
> :Float64(t2)
[
[1058, 1077,], [1089, 1090,],
]:Float64
# Изменить размерность тензора и его тип
# (в данном случае с частичной потерей данных)
> t3 := :Int8[4]( t2 )
[34, 53, 65, 66,]:Int8
Словари
# Создать тензор из словаря
>:Tensor( (1,2,3,) );
[1, 2, 3,]:Int8
# Преобразовать байтовую строку в тензор
>:Tensor( 'first second' )
[102, 105, 114, 115, 116, 32, 115, 101, 99, 111, 110, 100,]:Int8
# Получаем тензор из словаря с такими же данными
>:Tensor( ('first', space=32, second='second',) )
[102, 105, 114, 115, 116, 32, 115, 101, 99, 111, 110, 100,]:Int8