Добавил новый пример

This commit is contained in:
SunSerega 2019-07-17 22:16:11 +03:00
parent 3c1d8c52ea
commit ea4be34346
2 changed files with 39 additions and 8 deletions

View file

@ -1,9 +1,11 @@
// Пример иллюстрирует использование значка & для снятия атрибута ключевого слова
var
&begin,&end: integer;
begin
&begin := 1;
&end := 2;
var t: System.Type := &begin.GetType; // в System.Type использовать & не надо
write(&begin,' ',&end,' ',t);
// Пример иллюстрирует использование знака "&" (под 7 в англ. раскладке) для снятия атрибута ключевого слова
var
&begin,&end: integer;
begin
&begin := 1;
&end := 2;
var t: System.Type := &begin.GetType; // в System.Type использовать & не надо
write(&begin,' ',&end,' ',t);
end.

View file

@ -0,0 +1,29 @@
// Пример иллюстрирует использование знака "&" для явного указания шаблонного типа подпрограммы
function GetDefault<T>: T :=
default(T);
type
GenericType<T> = class
constructor := exit;
static procedure p1 := writeln(typeof(T));
end;
begin
// var o := GetDefault<byte>; //Ошибка: Встречено ';', а ожидалось выражение
// компилятор не отличает знак сравнения < от открытия угловой скобки
// и поэтому видит эту строчку как "(GetDefault < byte) > ;"
// ";" там оказывается неожиданно, потому что компилятор ожидал ещё какое то выражение для сравнения
// но, знаком "&" можно экранировать "<"
// то есть переключить значение "<" со знака сравнения на открывающуюся скобочку:
var o := GetDefault&<byte>;
// в случае с шаблонными типами - обычно "&" не нужен
var a := new GenericType<word>;
// однако для вызова статичного метода - его так же надо поставить
GenericType&<real>.p1;
end.