Преобразование типов
Несмотря на динамическую типизацию языка, если тип переменной указан явно, то автоматическое приведение типов не выполняется, и чтобы присвоить переменой значение не совместимого типа, требуется его явное преобразование.
Так как символьные названия типов относятся к деталям реализации, то явное преобразование в конкретный тип данных производится с помощью вызова функции с именем типа, т.е. :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
# Логическое значение - скаляр
>:Bool( [0, 53, 65, 66,] );
1:Bool
# Или так (тензор нулевой размерности)
>:Bool[0]( [0, 53, 65, 66,] );
1:Bool
# Тензор логических значений без изменения размера
>:Bool[_]( [0, 53, 65, 66,] );
[0, 1, 1, 1,]:Bool
Словари
# Создать тензор из словаря с автоматическим выводом размера
>: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
# Логическое значение - скаляр
>:Bool( (0,1,2,3,) );
1:Bool
# Тензор логических значений
>:Bool[...]( (0,1,2,3,) );
[0, 1, 1, 1]:Bool
# Различия между "..." и "_"
# Автоматический вывод размеров измерений
>:Tensor[...]( ((1,2,3,), (4,5,6,), (7,8,9,),) );
[
[1, 2, 3,], [4, 5, 6,], [7, 8, 9,]
]:Int8
# Одномерный тензор с произвольным размером
>:Tensor[_]( ((1,2,3,), (4,5,6,), (7,8,9,),) );
[ 1, 2, 3, 4, 5, 6, 7, 8, 9,]:Int8