هل من الممكن أن تعلن عن مجموعة متنوعة من صفيف في كل من دلفي وحرية دون الحصول على ثوابت العناصر؟
-
09-09-2019 - |
سؤال
منذ وقت طويل أتذكر أنني أستطيع القيام بذلك في توربو باسكال 7.
ربما أنا مخطئ وهو شيء أحتاج إلى توضيحه، لكن هل من الممكن إعلان مجموعة من السلاسل كمستمر؟
إن لم يكن ما هو الخيار / الحل البديل.
ما لدي الآن هو:
type
TStates = (sOne, sTwo, sThree);
var
TArrayOfString: array [sOne..sThree] of string =
('State one', 'State two', 'State three');
ولكن أود أن استبدال هذا var مع const.
شكرا
تحرير 1.: أضيف بعض الكود الإضافي لتوضيح سؤالي.
المحلول
مجرد استبدال فار مع مقدار ثابت قانونية تماما:
const
TArrayOfString: array [1..3] of string =
('String one', 'String two', 'String three');
أنا فضولي لماذا يبدأ اسم المعرف الخاص بك ب ب على أية حال. هل تحاول تحديد نوع مثل هذا:
type
TArrayOfString = array [1..3] of string;
const
MyArrayOfString: TArrayOfString =
('String one', 'String two', 'String three');
لا يمكنك الحصول على صفيف طول متغير (AFAIK) كوسكس، ولا يمكنك الحصول عليه من نوع غير محدد.
هذا مع دلفي 2009. YMMV مع freepascal.
نصائح أخرى
في اليوم القديم باسكال / دلفي عندما كتبت:
const
A : Integer = 5;
لم تحدد ثابتا، ولكن متغير تهيئة.
يمكنك تحديد دون مشكلة:
const
A : array [1..2] of string = ('a', 'b');
لكن السلاسل يجب أن تكون ثوابت أيضا. يحتاجون إلى أن تكون معروفة في تجميع الوقت.
الشيء نفسه ينطبق على:
var
A : array [1..2] of string = ('a', 'b');
لذلك لا يمكنك الكتابة:
var
B : string = 'hi';
A : array [1..2] of string = (B, 'b');
لأن ب هو var. ولكن يمكنك الكتابة:
const
B = 'hi'; // Even a typed constant does not work.
var
A : array [1..2] of string = (B, 'b');
لاحظ أن الخيار: "الثوابت المكتوبة القابلة للتكافؤة" (يتم توفير خطأ افتراضي) لإنشاء الثوابت المكتوبة بالوقت القديم الذي يمكن تعيينه. إنه موجود فقط للتوافق مع الوراء، لأنك تريد أن تكون الثوابت الخاصة بك ثابتة.