الاستخراج نوع (F#)

يصف هذا الموضوع كيفية infers المحول البرمجي F# أنواع القيم والمتغيرات ومعلمات و قيم إرجاع.

استنتاج النوع في عام

فكرة الاستخراج نوع هو لا يلزم تحديد أنواع بنيات F# إلا عندما لا المحول البرمجي deduce النوع لها conclusively. حذف معلومات نوع صريح لا يعني ذلك ب # هو weakly تمت كتابة لغة مكتوب بشكل حيوي أو تلك قيم في ب #. F# هو لغة مكتوب بشكل ثابت، وهو ما يعني أن المحول البرمجي deduces على نوع الدقيق لكل تركيبة أثناء التحويل البرمجي. إذا كان هناك هو المعلومات غير كافية لبرنامج التحويل البرمجي أنواع كل بناء deduce، يجب توفير معلومات نوع إضافى، عادة بإضافة التعليقات التوضيحية نوع صريح في أي مكان في تعليمات برمجية.

الاستخراج أنواع إرجاع و معلمة

في قائمة معلمات، لم يكن إلى تحديد نوع كل معلمة. وحتى الآن، ب # هو كتابة اللغة بشكل ثابت، ولذلك كل القيمة أو تعبير يحتوي على نوع معين في وقت التحويل البرمجي. لهؤلاء أنواع أن لم تحدد بشكل صريح، المحول البرمجي infers النوع استناداً إلى سياق. إذا كان النوع هو otherwهوe محدداً، هو الاستدلال أن يكون عاماً. إذا تستخدم التعليمة البرمجية inconsهوtently القيمة "، بحيث أن هناك هو واحد لا الاستدلال بنوع ذلك satهوfies كافة استخدامات القيمة، تقارير المحول البرمجي خطأ.

نوع الإرجاع للدالة هو تحديد حسب نوع التعبير أخير في دالة.

على سبيل المثال، في التعليمة البرمجية التالية، ومعلمة أنواع aو bوتكون الجميع نوع الإرجاع من الاستدلال أن intلأن الحرفي 100من نوع int.

let f a b = a + b + 100

يمكن أن تؤثر استنتاج النوع بواسطة تغيير الحرفية. إذا أجريت في 100على uint32بإلحاق اللاحقة u، الأنواع a، b، ويتم إرجاع الالقيمة الاستدلال إلى يكون uint32.

التي يمكن أن تؤثر أيضا كتابة الاستخراج باستخدام بنيات غير ذلك يشير إلى قيود تشغيل النوع، مثل كـ الدالات والأساليب التي تعمل مع نوع معين فقط.

أيضا، يمكنك يطبق نوع صريح التعليقات التوضيحية إلى معلمات دالة أو الأسلوب أو إلى المتغيرات في التعبيرات، كما هو مبين في الأمثلة التالية. تؤدي الأخطاء في حالة حدوث تعارضات بين قيود مختلفة.

// Type annotations on a parameter.
let addu1 (x : uint32) y =
    x + y

// Type annotations on an expression.
let addu2 x y =
    (x : uint32) + y

يمكنك أيضا بشكل واضح تحديد القيمة المرجعة من دالة بواسطة توفير تعليق توضيحي نوع بعد الجميع معلمات.

let addu1 x y : uint32 =
   x + y

عامة الحالة الموقع تعليق توضيحي نوع هو مفيدة في معلمة هو عند المعلمة هو نوع كائن وترغب في استخدام عضو.

let replace(str: string) =
    str.Replace("A", "a")

تعميم تلقائي

إذا كانت التعليمة البرمجية لدالة هو المحول البرمجي لا يعتمد تشغيل نوع معلمة، يعتبر المعلمة أن تكون عامة. Th هو هو تسمى تعميم التلقائي ويمكن أن يكون أي مساعدة قوية لكتابة تعليمات برمجية العامة دون زيادة تعقيد.

على سبيل المثال، تضم دالة التالي معلمتين من أي نوع في المجموعة.

let makeTuple a b = (a, b)

هو النوع الاستدلال إلى أن

'a -> 'b -> 'a * 'b

معلومات إضافية

اكتب الاستخراج هو هو موضح بمزيد من التفصيل في "مواصفات اللغة" ب #.

راجع أيضًا:

موارد أخرى

تعميم تلقائي (F#)