pascalabcnet/TestSuite/lambdas_generics12.pas
Ivan Bondarev dda097d85e #2118
2021-01-19 20:32:29 +01:00

43 lines
1.2 KiB
ObjectPascal
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.