pascalabcnet/TestSuite/lambdas_generics12.pas

43 lines
1.2 KiB
ObjectPascal
Raw Normal View History

2021-01-19 22:32:29 +03:00
var i: integer;
type
TBase = class
// Эта FErr должна быть шаблонная и принимать функцию возвращающую шаблонный параметр (T)
procedure PErr<T>(f: object->T) := exit;
end;
TErr<T> = class(TBase)
// А у этой PErr не важно какое возвращаемое значение f
procedure PErr(f: T->byte);
begin
f(default(T));
i := 1;
end;
procedure p1;
begin
// Обязательно "self.", без него не воспроизводится
self.PErr(o->
begin
var p: T->() := procedure(x)->exit;
// Обязательно передача в любую процедуру / функцию (не обязательно процедурную переменную)
// При присвоении переменной не воспроизводится
p(o); //Ошибка: Нельзя преобразовать тип object к T
Result := 0;
end);
end;
end;
begin
var o := new TErr<integer>;
o.p1;
assert(i = 1);
end.