[Pas2js] Testing generics
Mattias Gaertner
nc-gaertnma at netcologne.de
Sun Oct 27 22:40:16 CET 2019
On 26.10.19 14:30, warleyalex via Pas2js wrote:
> // ---- code ---
> uses
> JS, {Classes,} SysUtils, Web, Types, Math, TypInfo,
> generics.collections, generics.defaults, generics.strings, Classes;
>
> {$mode objfpc}
>
> type
> TPerson = class
> private
> FNome: String;
> procedure SetNome(const Value: String);
> public
> property Nome: String read FNome write SetNome;
> end;
>
> { TPerson }
> procedure TPerson.SetNome(const Value: String);
> begin
> FNome := Value;
> end;
>
> procedure PersonWithoutGenerics;
> var
> LListaPessoa: TList; //--> Error: Generics without specialization cannot
> be used as a type for a variable
> LPessoa : TPerson;
> LNomePessoa : String;
>
> begin
> LListaPessoa := TList.Create;
> LPessoa := TPerson.Create;
> try
> LPessoa.Nome := 'Fabio Rubim';
> LListaPessoa.Add(LPessoa);
> LNomePessoa:= TPerson(LListaPessoa[0]).Nome;
> WriteLn(LNomePessoa);
> finally
> LPessoa.Free;
> LListaPessoa.Free;
> end;
> end;
>
> procedure PersonWithGenerics;
> var
> LListaPessoas: specialize TList<TPerson>;
> LPessoa : TPerson;
> LNomePessoa : String;
>
> begin
> LListaPessoas := specialize TList<TPerson>.Create;
> LPessoa := TPerson.Create;
> try
> LPessoa.Nome := 'Fabio Rubim';
> LListaPessoas.Add(LPessoa);
> WriteLn(LListaPessoas[0].Nome);
> finally
> LListaPessoas.Free;
> end;
> end;
>
> begin
> // Your code here
> PersonWithoutGenerics;
> PersonWithGenerics;
> end.
> ----
>
> When I run the project I have the
> generics.collections.pas:612 Uncaught TypeError: Cannot set property
> 'undefined' of undefined
Fixed
Mattias
More information about the Pas2js
mailing list