Re[3]: А Вы хоть знаете что такое WITH?
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 20.10.04 07:48
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>На самом деле это конечно шутка, но предел упрощению тоже должен быть.

Д>И кстати говоря, упорный борец за простоту и понятность Вирт придумал такую замечательную вещь, как with. И не стыдно ему было других критиковать после этого?

А Вы хоть знаете что такое оператор WITH? Или это Вы взяли with из того паскаля, который был сразу после Алгола?

На всякий случай напишу что такое оператор WITH. В оберонах WITH — это оператор конкретизации типа.
TYPE
  Base = EXTENSIBLE RECORD
    ...
  END;

  T1 = RECORD (Base)
    ...
  END;

  T2 = RECORD (Base)
    ...
  END;

PROCEDURE MyProc(VAR x: Base);
BEGIN
  WITH x: T1 DO S1 | x: T2 DO S2 ELSE S3 END
END MyProc;


S1 — последовательность действий при которых x имеет тип T1
S2 — последовательность действий при которых x имеет тип T2
S3 — последовательность действий при которых динамический тип x не установлен.

Смысл: Если динамический тип полиморфной переменной x оказался T1, то выполняется S1 внутри которой x рассматривается как переменная типа T1; в противном случае если динамический тип полиморфной переменной x оказался T2, то выполняется S2 внутри которой x рассматривается как переменная типа T2; в противном случае выполняется S3.

TYPE
  Base = EXTENSIBLE RECORD END;

  T1 = RECORD (Base)
    Str: ARRAY 80 OF CHAR;
  END;

  T2 = RECORD (Base)
    Value: INTEGER;
  END;

PROCEDURE MyProc(VAR x: Base);
BEGIN
  WITH x: T1 DO StdLog.String(x.Str) | x: T2 DO StdLog.Int(x.Value) ELSE StdLog.String("Не известный тип!") END
END MyProc;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.