2009-03-05 11 views
12

Có thể sử dụng các bản ghi làm tham số phương thức và gọi nó mà không khai báo rõ ràng một bản sao của bản ghi đã nói không?Các nhà xây dựng bản ghi ẩn danh trong delphi

Tôi muốn có thể viết mã như thế này.

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

procedure Foo(AClasses : array of TRRec); 

sau đó gọi phương thức như thế này hoặc tương tự.

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

Tôi vẫn bị mắc kẹt trên Delphi 5 bằng cách này.

+1

bạn có nghĩa là không khai báo rõ ràng bản sao của bản ghi đã nói, đúng không? ;) – jpfollenius

+0

Nó cũng có thể là tốt hơn để nói "hồ sơ vô danh _initialisers_" –

Trả lời

17

Có. Hầu hết.

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

giải pháp thanh lịch, cảm ơn bạn. –

6

Nó cũng có thể làm việc với một mảng const, nhưng nó không phải là quá linh hoạt như các giải pháp được đưa ra bởi "gangph": (đặc biệt là bạn phải cung cấp cho các kích thước ([0..1 ]) của mảng trong khai báo mảng. Các bản ghi là không đồng nhất, mảng không phải là).

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.