Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: angman - Febbraio 11, 2025, 03:22:04 pm

Titolo: problema con generic function
Inserito da: angman - Febbraio 11, 2025, 03:22:04 pm
Ciao, ho scritto un generic function:
function IIF<T>(Condition: boolean; Arg1, Arg2: T): T; 
function IIF<T>(Condition: boolean; Arg1, Arg2: T): T;
begin
   if Condition = True then
    Result := Arg1
  else
    Result := Arg2;

end;   

Quando la chiamo come string e concateno il risultato con uno string literal:
  String(IIF<string>(bQueryExecuted, 'TRUE', 'FALSE')) + 'prova';
Il compilatore da questo errore:
uADOUtility.pas(131,28) Error: Syntax error, ")" expected but "," found
se non concateno  funziona bene.

Cosa sbaglio?
Grazie
Titolo: Re:problema con generic function
Inserito da: DragoRosso - Febbraio 11, 2025, 03:57:08 pm
A me stà funzionando con Lazarus 3.8 e FPC 3.2.2 (le ultime versioni "stabile").

Comunque non serve la "String(" prima della chiamata ad IIF<string>, basta solo chiudere la IIF (completa dei suoi argomenti) tra parentesi.

Codice: [Seleziona]
(IIF<string>(bQueryExecuted, 'TRUE', 'FALSE')) + 'prova';

Quello che hai scritto richiede il modificatore {$mode delphi} ... se usi lo standard "objfpc" e non ti funziona riporta qui il codice completo di definizione e specialize.

Ciao
Titolo: Re:problema con generic function
Inserito da: angman - Febbraio 11, 2025, 04:19:47 pm
il {$MODE Delphi}  è specificato
Titolo: Re:problema con generic function
Inserito da: angman - Febbraio 11, 2025, 04:44:16 pm
unit uIIFUtil;

{$MODE Delphi}

interface

uses
  Graphics, ExtCtrls, uBaseTypes;
{ #todo 1 -o'Angelo M' -cRefactoring : Sarebbe meglio usare una generic function}
{
function strIIF(Condition: boolean; s1, s2: string): string;
function intIIF(Condition: boolean; i1, i2: integer): integer;
function colorIIF(Condition: boolean; c1, c2: TColor): TColor;
function imageIIF(Condition: boolean; img1, img2: TImage): TImage;
function chrIIF(Condition: boolean; c1, c2: char): char;
function realIIF(Condition: boolean; r1, r2: extended): extended;
function ptrIIF(Condition: boolean; r1, r2: TLogFunction): TLogFunction;
}
function IIF<T>(Condition: boolean; Arg1, Arg2: T): T;

implementation

function ptrIIF(Condition: boolean; r1, r2: TLogFunction): TLogFunction;
begin
  if Condition = True then
    Result := r1
  else
    Result := r2;
end;                       
Titolo: Re:problema con generic function
Inserito da: DragoRosso - Febbraio 11, 2025, 05:08:58 pm
Non hai aggiunto alcuna informazione utile a quello che c'era prima, quindi ti posto il mio progetto così lo puoi fare girare.

Ciao
Titolo: Re:problema con generic function
Inserito da: nomorelogic - Febbraio 12, 2025, 09:41:30 am
ciao angman

per postare del codice dovresti usare gli appositi tag
quando sei in editing del messaggio, si tratta di usare il bottoncino con il cancelletto (o hashtag) e mettere il codice tra i 2 tag che compaiono

in questo modo il codice verrà visualizzato come sotto

Codice: [Seleziona]
program saluti;
begin
  WriteLn('ciao mondo');
end;
Titolo: Re:problema con generic function
Inserito da: angman - Febbraio 12, 2025, 10:54:12 am
Ok grazie
Titolo: Re:problema con generic function
Inserito da: angman - Febbraio 12, 2025, 06:22:23 pm
risolto il problema era dovuto alla macanza delle parentesi nella chiamata.