pascalabcnet/TestSuite/patterns/patterns-overloading-and-ambiguity.pas
Alexandr Pogorelov 8a432eee6e
Улучшение паттерн матчинга (#1949)
Матчинг констант, таплов, коллекций. Улучшение матчинга по типам.
2019-05-24 10:04:17 +03:00

38 lines
720 B
ObjectPascal

type
My<T> = class
public
_a: T;
procedure Deconstruct(var a: T);
begin
a := _a;
end;
end;
procedure Deconstruct<T>(self: My<T>; var a: T); extensionmethod;
begin
Assert(false);
a := self._a;
end;
procedure Deconstruct<T>(self: My<T>; var a: object); extensionmethod;
begin
a := self._a;
end;
procedure Deconstruct<T>(self: My<T>; var a: object; var b: object); extensionmethod;
begin
Assert(false);
a := self._a;
end;
begin
var l := new My<List<integer>>;
l._a := Arr(1, 2, 3).ToList;
match l as object with
My<real>(a: real): Assert(false);
My<integer>(a: integer): Assert(false);
My<List<integer>>(a: object): ;
else Assert(false);
end;
end.