~

Доступ к переменной заданного типа по ссылке.

Синтаксис:

~<тип данных>(<имя переменной>);
~(< имя переменной >)

Аргументы:

Имя Тип данных Описание
тип данных Название типа данных
имя переменной complex Имя переменной, на которую была получена ссылка. Интерпретируется скриптовым языком, как комплексная переменная, но при этом само отображаемое значение возвращаемой переменной не имеет смысла.

Описание:

Доступ к переменной заданного типа по ссылке. Используются типизированные конструкции для доступа к данным разного типа:

a = ~integer(i) - возвращает данные целого по ссылке;

a = ~double(i) - вещественного;

a = ~complex(i) - комплексного;

a = ~intarray(i) - целочисленный массив;

a = ~array(i) - действительный массив;

a = ~matrix(i) - действительная матрица;

a = ~boolean(i) - двоичное;

a = ~string(i) - стока;

a = ~point(i) - двумерная геометрическая точка;

a = ~color(i) - цвет;

a = ~carray(i) - комплексный вектор;

a = ~cmatrix(i) - комплексная матрица;

Результат:

Имя Тип данных Описание
a Функция возвращает значение переменной, к которой происходит доступ, если функция в правой части выражения, функциия присваивается значение, если функция в левой части.

Пример 1:

var i=10,
arr:array;
ptr = @i; //получение ссылки
ptr1 = @arr;
d = ~double(ptr); //доступ по ссылке
w = ~array(ptr1);
~double(ptr) = 1000;

В процессе выполнения примера создается ссылка ptr на переменную i и ссылка ptr1 на массив arr. При помощи функции ~ происходит доступ по ссылке к переменным i и arr. Переменной i по ссылке ptr присваивается значение 1000.

Пример 2:

var a: double;
a = 10;
aptr = @a; // Получение ссылки на переменную 
var b: double;
//Получение значения переменной по ссылке с использованием нетипизированного указателя
b = ~(aptr);
b = b + 1;
//Присвоение по ссылке с использованием нетипизированного доступа к указателю
~(aptr) = b + 1;

В процессе выполнения примера создается ссылка aptr на переменную a и затем получение ее значения а также присваивание ей нового значения с использованием нетипизированного указателя.

Пример 3:

initialization

//В этом массиве мы будем хранить указатели на матрицы
//он должен быть комплексного типа
var ptrs_array: carray;

//Создание
ptrs_array = 100#0; 
for(i=1,100) begin
//Вот так мы выделяем память
ptrs_array[i]=new~matrix;
//Присваиваем значение матрицы
~matrix(ptrs_array[i])=[[1,2],[3,1]];
end;

//Чтение - тут мы суммируем детерминанты матриц
summ = 0;
for(i=1,100) begin
dd = det(~matrix(ptrs_array[i]));
summ = summ + dd;
end;

//Уничтожение объектов после того, как мы закончили их использование
for(i=1,100) begin
dispose(ptrs_array[i]);
end;

end;

Пример показывает использование массива указателей на 100 матриц и последующее обращение к каждой из них.

Сопутствующие материалы

  • perekluchenie_signalov_po_ukazatelu.dita#
  • generacia_tekstovoi_tabl_i_upakovka_ee_v_gruppu.dita#