Приведение типов
Оператор as
Оператор as может выполнять две функции: присваивать значение переменной и изменять тип. Оператор бинарный, вычисляется справа налево. Левый операнд обязательно должен быть локальной переменной типа uint. В зависимости от правого операнда может быть два варианта работы.
Первый вариант
Правый операнд - имя структурного типа. Значение локальной переменной не изменяется, но её тип временно меняется на указанный, предполагается, что переменная содержит адрес какого-либо объекта и к переменной теперь можно обращаться непосредственно как к объекту, без использования операции взятия значения ->.
str mystr
uint a
a = &mystr
a as str
a = "New value"
Второй вариант
Правый операнд - выражение которое возвращает объект. Переменной присваивается адрес на данный объект и она меняет свой тип на тип этого объекта. Объект должен иметь тип отличный от числового.
str mystr
uint a
a as mystr
a = "New value"
Тип переменной остаётся изменённым до конца текущего блока или до следующей операции as над этой переменной.
Оператор ->
Часто требудется просто указать, что переменная имеет определенный структурный тип. В этом случае можно использовать оператор -> с именем требуемого структурного типа. Вместе с именем типа можно указывать размерность в квадратных скобках и тип элементов с помощью of. Переменная к которой применяется -> может быть любого структурного типа, а не только uint.
func myfunc( uint mode, uint obj )
{
str ret
uint val
switch mode
{
case 0: myproc( obj->arrstr )
case 1: print( obj->str )
case 2: obj->mytest.mytest2str( ret )
case 3
{
val = (obj->arr[,] of ubyte )[1,1]
}
}
}
Конвертация типов
По умолчанию автоматически конвертируются друг в друга только целочисленные типы byte,ubyte, short, ushort, int, uint, для других типов следует использовать явную ковертации. Для конвертации выражения в другой тип, пишется имя типа, в который будет произведена конвертация и само выражение в скобках, конвертация будет проведена только в том случае если исходный тип имеет соответствующий метод. Подробнее о реализации таких методов смотрите на странице Определение метода method.
str a = "10"
uint b
b = uint( a )