Newsgroup: it.comp.lang.delphi
Titolo: (Newbies)Array di funzioni: si può?

Si riesce a fare un array di funzioni?
Così che se chiamo array(0) fà la funzione1, array(1) fà la 
funziona2...ecc ecc
Grazie


Molto probabilmente non sarà la stessa cosa che cerchi tu, ma potresti 
prendere spunto da questo esempio:
Function MyArray (Value: Byte): MyType;
   Begin
       Case Value Of
           1:    Result := Funzione1 ();
           2:    Result := Funzione2 ();
           ....
           N:    Result := FunzioneN ();
       End;
   End;
e quindi definire ciascuna funzione:
Function Funzione1 () : MyType;
  Begin
     ...
  End;
Function Funzione2 () : MyType;
  Begin
     ...
  End;
Function FunzioneN () : MyType;
  Begin
     ...
  End;
Ne consegue che richiamando la funzione:   MyArray (1)  tu esegui funzione1 
();  richiamando MyArray2 tu esegui: funzione2 (); e cosi via.
Non so se ti va bene questa come soluzione; ma dovrebbe soddisfare quello 
che hai richiesto; in alternativa prova ad essere più chiaro :-)
Ciao :)
 

 Ciao :)
Va benissimo, GRAZIE!

 ha scritto nel messaggio 
news:Q3Rpn.38055$Ua....@twister2.libero.it...

Prego :-) 

 Grazie
Certo che si puo' ma con le seguenti limitazioni:
1) La dichiarazione delle procedure/funzioni deve essere identica (in 
realta' sarebbe aggirabile lavorando con i puntatori)
2) Le procedure/funzioni non possono essere locali ad una procedura
Esempiuccio:
// ----------------------------------------------------
// queste sono le funzioni da inglobare nell'array
// ----------------------------------------------------
Function Function1(Value : Integer) : String;
Begin
   Result := 'F1:'+intToStr(Value);
End;
Function Function2(Value : Integer) : String;
Begin
   Result := 'F2:'+intToStr(Value);
End;
Function Function3(Value : Integer) : String;
Begin
   Result := 'F3:'+intToStr(Value);
End;
Function Function4(Value : Integer) : String;
Begin
   Result := 'F4:'+intToStr(Value);
End;
Function Function5(Value : Integer) : String;
Begin
   Result := 'F5:'+intToStr(Value);
End;
// ----------------------------------------------------
// Procedura di test
// ----------------------------------------------------
procedure TTryForm.Button1Click(Sender: TObject);
Type
   // ----------------------------------------------------
   // Dichiarazione della funzione usata
   // ----------------------------------------------------
   TFunction = Function(value : integer) : String;
Var
   // ----------------------------------------------------
   // Vettore di funzioni usato
   // ----------------------------------------------------
   VetFun : Array[1..5] Of TFunction;
Var
   I : Integer;
begin
   // ----------------------------------------------------
   // Assegnazione del vettore
   // ----------------------------------------------------
   VetFun[1] := Function1;
   VetFun[2] := Function2;
   VetFun[3] := Function3;
   VetFun[4] := Function4;
   VetFun[5] := Function5;
   // ----------------------------------------------------
   // Uso delle funzioni in un ciclo
   // ----------------------------------------------------
   For I := 1 To 5 Do Memo1.Lines.Add(VetFun[I](2));
end;

   <CUT>
Interessante spunto per un approccio un pochino diverso :)
Type
   TFunction = Function(value : Variant) : Variant;
   TMyClass = Class
   private
     Class Function Function1(Value: Variant): Variant;Static;
     Class Function Function2(Value: Variant): Variant;Static;
     Class Function Function3(Value: Variant): Variant;Static;
     Class Function Function4(Value: Variant): Variant;Static;
     Class Function Function5(Value: Variant): Variant;Static;
     class procedure SettaArray; static;
     { Private declarations }
   public
     VetFun : Array[1..5] Of TFunction;
     constructor Create;
     { Public declarations }
   end;
.....
constructor TMyClass.Create;
begin
   inherited Create;
   VetFun[1] := Function1;
   VetFun[2] := Function2;
   VetFun[3] := Function3;
   VetFun[4] := Function4;
   VetFun[5] := Function5;
end;
Class Function TMyClass.Function1(Value : Variant) : Variant;
Begin
   Result := (Value);
   ......
End;
tralascio la creazioni delle altre function ...
Uso la classe
procedure TForm1.Button1Click(Sender: TObject);
Var
   I : Integer;
   oClass: TMyClass;
begin
   oClass := TMyClass.Create;
   Try
     For I := 1 To 5 Do
       Memo1.Lines.Add(oClass.VetFun[I](I));
   Finally
      oClass.Free;
   End;
end;
^_Goblin_^
-- 
Ibis et redibis non morieris in bello
http://goblinland.myminicity.com/

 CUT
Orca!!!
Grazie a entrambi!!!