Logo

Этюд 4. Разыменование ссылки

Ссылка в Канторе — объект, который может принимать значение null, что обозначается ключевым словом ref и является атрибутом конкретного параметра или функции, ссылочных типов нет. Разыменование ссылки синтаксически неотличимо от обращения к объекту — операция всегда применяется к самому объекту, а какие-либо операции над самой ссылкой отсутствуют.

На Delphi

Этот этюд отступает от традиций: при его подготовке код переводился с Кантора на Delphi, а не наоборот. В результате пример на Delphi представлен псевдокодом, поскольку точный перевод с Кантора на Delphi невозможен.
var
  Five = 5;

const
  PtrToFive = @Five; // в Канторе это функция
  begin
    Inc(Five);
  end;

var
  Six := PtrToFive^; // присваивание с явным разыменованием

var
  A: ^Integer;       // неинициализированная переменная

На Канторе

Присваивание ссылки не-ссылке есть разыменование, а присваивание одной переменной другой — всегда копирование (new from).
var five = 5;
ref ptrToFive = five;
ptrToFive++; // операций над ссылками в Канторе нет,
             // поэтому five теперь равно 6
var six = ptrToFive; // присвоение ссылки не-ссылке, то есть
                     // var six = new from ptrToFive;
                     // аналог конструктора копирования в Канторе
                     // вызовет исключение при разыменовании null

// Пример-ловушка
var Core:Integer a; // описывает ссылку, поскольку понятия
                    // неинициализированных переменных в Канторе нет,
                    // единственное умолчание -- это null,
                    // а null можно присвоить только ссылке
Пример-ловушка скорее всего будет считаться предупреждением и вызывать остановку компиляции в режиме строгой проверки синтаксиса (warnings as errors).

См. также

Комментариев нет :

Отправить комментарий

Выбрав в выпадающем списке пункт «Имя/URL», можно оставить комментарий от своего имени без предварительной регистрации.