سؤال

هل من الممكن استخدام سجلات كمعلمة طريقة، والذي يطلق عليه دون أن تعلن ضمنيا مثيل سجل قال؟

وأود أن تكون قادرة على كتابة التعليمات البرمجية مثل هذا.

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

procedure Foo(AClasses : array of TRRec);

وثم استدعاء الأسلوب مثل هذا أو شيئا من هذا القبيل.

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

وأنا لا تزال عالقة في دلفي 5 بالمناسبة.

هل كانت مفيدة؟

المحلول

نعم. تقريبا.

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)]);

نصائح أخرى

ومن الممكن أيضا للعمل مع مجموعة CONST، ولكنها ليست مرنة ذلك الحل الذي قدمته "gangph": (وخصوصا أن لديك لإعطاء حجم ([0..1]) من مجموعة في إعلان مجموعة، والسجلات anomymous، ومجموعة ليست).

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.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top