سؤال

أنا أقوم ببناء شجرة تعبير باستخدام النقابات التمييزية.الكود أدناه:

type IntExpression =
    | TrueIsOne of BoolExpression

type BoolExpression =
    | LessThan of IntExpression * IntExpression
    | And of BoolExpression * BoolExpression
    | Or of BoolExpression * BoolExpression
    | Bool of bool

يلقي خطأ لأنه لم يتم تعريف BoolExpression.يؤدي تبديل التعريفات إلى العكس (لم يتم تعريف IntExpression) كما تتوقع.

هل هناك طريقة للتغلب على ذلك؟

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

المحلول

نعم استخدم and لتجميع تعريفات النوع مع التبعيات المتبادلة:

type IntExpression =
    | TrueIsOne of BoolExpression

and BoolExpression =
    | LessThan of IntExpression * IntExpression
    | And of BoolExpression * BoolExpression
    | Or of BoolExpression * BoolExpression
    | Bool of bool

نصائح أخرى

"و" يعمل بشكل عام لأنواع ذات التبعيات المتبادلة.وهذا يعني أنه يعمل لجميع الأنواع، مثل النقابات التمييزية، كما هو موضح من قبل MAU، الطبقات والسجلات والوظائف العودية المتبادلة.

مثال غير مهم:

giveacodicetagpre.

ربما هذا سيعمل:

giveacodicetagpre.

(معلومات مأخوذة من هذه الصفحة على MSDN .)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top