2009-03-05 7 views
12

में बेनामी रिकॉर्ड कन्स्ट्रक्टर क्या एक विधि पैरामीटर के रूप में रिकॉर्ड का उपयोग करना संभव है, और इसे बिना किसी रिकॉर्ड के उदाहरण घोषित किए बिना कॉल करें?डेल्फी

मैं इस तरह कोड लिखने में सक्षम होना चाहता हूं।

type 
    TRRec = record 
    ident : string; 
    classtype : TClass; 
    end; 

procedure Foo(AClasses : array of TRRec); 

फिर इस तरह की विधि या इसी तरह की विधि को कॉल करना।

Foo([('Button1', TButton), ('Lable1', TLabel)]); 

मैं अभी भी डेल्फी 5 पर फंस गया हूं।

+1

आपका मतलब है कि बिना किसी रिकॉर्ड के उदाहरण घोषित किए, क्या आप नहीं? ;) – jpfollenius

+0

यह भी कहना बेहतर हो सकता है कि "अज्ञात रिकॉर्ड _initialisers_" –

उत्तर

17

हां। लगभग।

type 
    TRRec = record 
    ident : string; 
    classtype : TClass; 
    end; 

function r(i: string; c: TClass): TRRec; 
begin 
    result.ident  := i; 
    result.classtype := c; 
end; 

procedure Foo(AClasses : array of TRRec); 
begin 
    ; 
end; 

// ... 
Foo([r('Button1', TButton), r('Lable1', TLabel)]); 
+0

सुरुचिपूर्ण समाधान, धन्यवाद। –

6

यह भी एक स्थिरांक सरणी के साथ काम करने के लिए संभव है, लेकिन यह समाधान "gangph" द्वारा दिए गए के रूप में इतना लचीला नहीं है: (आप आकार देने के लिए विशेष रूप से है कि ([0..1 ]) सरणी घोषणा में सरणी के। रिकॉर्ड अनियमित हैं, सरणी नहीं है)।

type 
    TRRec = record 
    ident : string; 
    classtype : TClass; 
    end; 

procedure Foo(AClasses : array of TRRec); 
begin 
end; 

const tt: array [0..1] of TRRec = ((ident:'Button1'; classtype:TButton), 
            (ident:'Lable1'; classtype:TLabel)); 

Begin 
    Foo(tt); 
end.