Code examples
This commit is contained in:
parent
7d8aac474b
commit
aa4a847bad
43
CodeExamples/Patterns/patterns-collection-matching1.pas
Normal file
43
CodeExamples/Patterns/patterns-collection-matching1.pas
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
type
|
||||
CardInfo = auto class
|
||||
public
|
||||
cardNumber: string;
|
||||
cv: integer;
|
||||
end;
|
||||
|
||||
Person = class
|
||||
|
||||
public
|
||||
name: string;
|
||||
age: integer;
|
||||
card: CardInfo;
|
||||
|
||||
constructor(name: string; age: integer; card: CardInfo);
|
||||
begin
|
||||
self.name := name;
|
||||
self.age := age;
|
||||
self.card := card;
|
||||
end;
|
||||
|
||||
procedure Deconstruct(var name: string; var age: integer; var card: CardInfo);
|
||||
begin
|
||||
name := self.name;
|
||||
age := self.age;
|
||||
card := self.card;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
var a := Arr(1,9,8,7,2,3,4,5);
|
||||
|
||||
// Расширенный is
|
||||
if a is [1,..,x,_,5] then
|
||||
Println(x);
|
||||
|
||||
// match .. with
|
||||
match a with
|
||||
[1,9,8,7,2]: print(1);
|
||||
[..,4,x]: print(x);
|
||||
[_, .., _]: print(3);
|
||||
end;
|
||||
end.
|
||||
46
CodeExamples/Patterns/patterns-collection-matching2.pas
Normal file
46
CodeExamples/Patterns/patterns-collection-matching2.pas
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
type
|
||||
CardInfo = auto class
|
||||
public
|
||||
cardNumber: string;
|
||||
cv: integer;
|
||||
end;
|
||||
|
||||
Person = class
|
||||
|
||||
public
|
||||
name: string;
|
||||
age: integer;
|
||||
card: CardInfo;
|
||||
|
||||
constructor(name: string; age: integer; card: CardInfo);
|
||||
begin
|
||||
self.name := name;
|
||||
self.age := age;
|
||||
self.card := card;
|
||||
end;
|
||||
|
||||
procedure Deconstruct(var name: string; var age: integer; var card: CardInfo);
|
||||
begin
|
||||
name := self.name;
|
||||
age := self.age;
|
||||
card := self.card;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
var p1 := new Person('Вася', 11, new CardInfo('12345671', 321));
|
||||
var p2 := new Person('Петя', 12, new CardInfo('12345672', 322));
|
||||
var p3 := new Person('Маша', 13, new CardInfo('12345673', 323));
|
||||
var personArr := Arr(p1, p2, p3);
|
||||
|
||||
// Расширенный is
|
||||
if personArr is [Person(name1, 11, CardInfo(_, cv)), _, Person(name2, 13, _)] then
|
||||
println(name1, cv, name2);
|
||||
|
||||
// match .. with
|
||||
match personArr with
|
||||
[_,_,Person('Вася', age, _)]: print(age);
|
||||
[p, .., Person('Маша', _, _)]: print((p as Person).name);
|
||||
[..]: print(1);
|
||||
end;
|
||||
end.
|
||||
43
CodeExamples/Patterns/patterns-collection-matching3.pas
Normal file
43
CodeExamples/Patterns/patterns-collection-matching3.pas
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
type
|
||||
CardInfo = auto class
|
||||
public
|
||||
cardNumber: string;
|
||||
cv: integer;
|
||||
end;
|
||||
|
||||
Person = class
|
||||
name: string;
|
||||
age: integer;
|
||||
card: List<CardInfo> := new List<CardInfo>();
|
||||
|
||||
constructor(name: string; age: integer; card: List<CardInfo>);
|
||||
begin
|
||||
self.name := name;
|
||||
self.age := age;
|
||||
self.card := card;
|
||||
end;
|
||||
|
||||
procedure Deconstruct(var name: string; var age: integer; var card: List<CardInfo>);
|
||||
begin
|
||||
name := self.name;
|
||||
age := self.age;
|
||||
card := self.card;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
var cards := new List<CardInfo>();
|
||||
cards.Add(new CardInfo('12345671', 321));
|
||||
cards.Add(new CardInfo('12345672', 322));
|
||||
cards.Add(new CardInfo('12345673', 323));
|
||||
cards.Add(new CardInfo('12345674', 324));
|
||||
|
||||
var p := new Person('Вася', 21, cards);
|
||||
|
||||
// match .. with
|
||||
match p with
|
||||
Person('Петя', _, _): print('Петя');
|
||||
Person('Вася', _, [_, _, x]): print(x);
|
||||
Person(name, _, [CardInfo(_, 321), .., CardInfo(_, 324)]): print(name);
|
||||
end;
|
||||
end.
|
||||
40
CodeExamples/Patterns/patterns-type-matching1.pas
Normal file
40
CodeExamples/Patterns/patterns-type-matching1.pas
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
type
|
||||
CardInfo = auto class
|
||||
public
|
||||
cardNumber: string;
|
||||
cv: integer;
|
||||
end;
|
||||
|
||||
Person = class
|
||||
name: string;
|
||||
age: integer;
|
||||
card: CardInfo;
|
||||
|
||||
constructor(name: string; age: integer; card: CardInfo);
|
||||
begin
|
||||
self.name := name;
|
||||
self.age := age;
|
||||
self.card := card;
|
||||
end;
|
||||
|
||||
procedure Deconstruct(var name: string; var age: integer; var card: CardInfo);
|
||||
begin
|
||||
name := self.name;
|
||||
age := self.age;
|
||||
card := self.card;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
var a := new Person('Вася', 11, new CardInfo('12345678', 324));
|
||||
|
||||
// Расширенный is
|
||||
if a is Person('Вася', var age, CardInfo(_, var cv)) then Println(age, cv);
|
||||
|
||||
// match .. with
|
||||
match a with
|
||||
Person('Вася', 12, CardInfo('12345678', var cv)): Println(cv);
|
||||
Person('Вася', _, CardInfo(cardNum, 324)): Println(cardNum);
|
||||
Person(_, _, CardInfo(_, x)): Println(x);
|
||||
end;
|
||||
end.
|
||||
Loading…
Reference in a new issue