Здравствуйте, Дарней, Вы писали:
Д>На самом деле это конечно шутка, но предел упрощению тоже должен быть.
Д>И кстати говоря, упорный борец за простоту и понятность Вирт придумал такую замечательную вещь, как 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;