[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