السجلات ودلالات القيمة
لبات 0.7.0 · الإصدار الحالي
عمليات 0.7.0 الحالية ودعم المضيف والأمثلة وقواعد الإخفاق.
محتويات الصفحة
أنواع السجلات المسماة
يدعم لبات 0.7.0 سجل/record في المضيفين. صرح بالسجل على مستوى الملف بحقوله المسماة والمحددة النوع والمفصولة بفواصل. تقبل فاصلة أخيرة. تجمع أسماء السجلات قبل حل أنواع الحقول، فلا يهم ترتيب التصريحات.
السجلات اسمية. يمثل تصريحان بالحقول نفسها نوعين مختلفين، وتتبع الهوية وحدة المصدر التي تعرف النوع. يدعم المتصفح السجلات في ملف الدخول؛ تتطلب وحدات مصدر المستخدم تنفيذا أصليا.
مقطع توضيحي
سجل عنصر { اسم: نص, أعداد: قائمة<ص64> }البناء والوصول إلى الحقول
ابن القيمة باسم النوع وقدم كل حقل مرة واحدة. تقيم الحقول بترتيب كتابتها. الحقول المجهولة أو المكررة أو المفقودة أو من نوع unit أخطاء مصدر. ترفض الأنواع العودية المباشرة وغير المباشرة، ومنها العودية عبر القوائم أو النتائج.
تقرأ :: اللاحقة حقلا بالقيمة، وتتسلسل مع فهارس القوائم بأسبقية أعلى من الحساب. تبقى أسماء حقول المستخدم بتهجئتها في المصدر العربي والإنجليزي والمختلط. حقول النتيجة ومعلومات الخطأ المدمجة فقط لها أسماء بديلة موردة باللغتين. ضع باني السجل المباشر في شرط إذا/if أو طالما/while بين قوسين لتمييز أقواسه عن الكتلة التالية.
مقطع توضيحي
دع قيمة = عنصر { اسم: "أدوات", أعداد: [2, 3] };
اطبع(قيمة::اسم);النسخ والتعديل المتداخل
ينسخ الإسناد والمعامل والإرجاع قيم السجلات. للقائمة أو السجل المتداخل في النسخة دلالات قيمة أيضا. لا تغير حقلا أو عنصرا مفهرسا إلا عبر ربط جذري متغير/var. لا يمكن تعديل معامل أو ربط دع/let أو قيمة مؤقتة أو إسقاط حمولة نتيجة. انسخ الحمولة الناجحة إلى ربط جديد قابل للتعديل إذا احتجت إلى تغييرها.
ينسخ المثال الكامل حالة محلل، ويغير مؤشرها وحقل رمز متداخل، ثم يتحقق من بقاء القيم القديمة في الأصل. ويحمل أيضا سجلا داخل result<record-type>.
التنفيذ: المتصفح والمضيف الأصلي · لبات 0.7.0
- لا يتطلب معرفة سابقة لفتحه وفحصه.
الإدخال: لا يحتاج إلى أسطر إدخال.
سجل رمز { نوع: ص64, متن: نص, سطر: ص64, عمود: ص64 }
سجل حالة_محلل { رموز: قائمة<رمز>, مؤشر: ص64 }
دالة رمز_الحالة(حالة: حالة_محلل) -> رمز {
أرجع حالة::رموز[حالة::مؤشر].
}
دالة ابدأ_الرئيسية() -> ص64 {
دع زائد: رمز = رمز { نوع: 1, متن: "+" , سطر: 2, عمود: 7 }.
إذا (زائد::نوع لا يطابق 1) { أرجع 1. }
إذا (زائد::متن لا يطابق "+") { أرجع 2. }
إذا (زائد::سطر لا يطابق 2) { أرجع 3. }
إذا (زائد::عمود لا يطابق 7) { أرجع 4. }
متغير حالة: حالة_محلل = حالة_محلل { رموز: [زائد], مؤشر: 0 }.
إذا (رمز_الحالة(حالة)::متن لا يطابق "+") { أرجع 5. }
متغير منقولة: حالة_محلل = حالة.
منقولة::مؤشر = 1.
إذا (حالة::مؤشر لا يطابق 0) { أرجع 6. }
إذا (منقولة::مؤشر لا يطابق 1) { أرجع 7. }
منقولة::رموز[0]::عمود = 9.
إذا (حالة::رموز[0]::عمود لا يطابق 7) { أرجع 8. }
إذا (منقولة::رموز[0]::عمود لا يطابق 9) { أرجع 9. }
دع موجود: نتيجة<رمز> = نجاح(زائد).
إذا (موجود::نجاح) {
إذا (موجود::قيمة::سطر لا يطابق 2) { أرجع 10. }
} وإلا {
أرجع 11.
}
اطبع("3 tokens").
أرجع 0.
}
النتائج المتوقعة
{
"browser": {
"check": "success",
"class": "success",
"output": "3 tokens",
"processStatus": 0
},
"native": {
"check": 0,
"status": 0,
"output": "3 tokens"
}
}الإخفاقات والنطاق
لا تدعم مساواة سجلين كاملين. أخطاء الحقول والأنواع أخطاء مصدر؛ يوقف فهرس قائمة متداخلة غير صالح التنفيذ بسبب list-index-out-of-bounds، وقراءة فرع نتيجة خاطئ بسبب wrong-result-branch. توسع السجلات MVP التاريخي، ولا يعتمد سلوكها الحالي على تخطيط بنية C.
اقرأ كل صيغ السجلات والقوائم والنتائج القابلة للاسترداد.