الوحدات النمطية (F#)

في the سياق of the F# اللغة, a وحدة نمطية? هو a تجميع of F# تعليمات برمجية, such كـ قيم, أنواع, و دالة قيم, في an F# برنامج. تجميع تعليمات برمجية في الوحدات النمطية يساعد في المحافظة على تعليمات برمجية ذات الصلة معا ويساعد على تجنب تعارضات في الاسم في البرنامج الخاص بك.

// Top-level module declaration. 
module [accessibility-modifier] [qualified-namespace.]module-name
declarations
// Local module declaration.
module [accessibility-modifier] module-name =
   declarations

ملاحظات

An F# وحدة نمطية? هو a تجميع of F# تعليمات برمجية constructs such كـ أنواع, قيم, دالة قيم, و تعليمات برمجية في do bindings. It هو implemented كـ a وقت تشغيل اللغة العامة (CLR) فئة that has فقط ثابت الأعضاء. There are الثاني أنواع of وحدة نمطية? تصريحات, depending تشغيل whether the whole ملف هو مُضمن في the وحدة نمطية?: a الأعلى-المستوى وحدة نمطية? إعلان و a محلي وحدة نمطية? إعلان. A الأعلى-المستوى وحدة نمطية? إعلان يتضمن the whole ملف في the وحدة نمطية?. A الأعلى-المستوى وحدة نمطية? إعلان can appear فقط كـ the أول إعلان في a ملف.

في the بناء الجملة for the الأعلى-المستوى وحدة نمطية? إعلان, the اختياري qualified-namespace هو the تسلسل of nested مساحة الاسم أسماء that يحتوي على the وحدة نمطية?. The qualified مساحة الاسم does not have إلى be previously declared.

You do not have إلى يغيّر المسافة البادئة تصريحات في a الأعلى-المستوى وحدة نمطية?. You do have إلى يغيّر المسافة البادئة الجميع تصريحات في محلي الوحدات النمطية. في a محلي وحدة نمطية? إعلان, فقط the تصريحات that are indented under that وحدة نمطية? إعلان are part of the وحدة نمطية?.

If a ‏‏رمز الملف does لا يبدأ بـ a الأعلى-المستوى وحدة نمطية? إعلان أو a مساحة الاسم إعلان, the whole المحتويات of the ملف, including أي محلي الوحدات النمطية, becomes part of an ضمنيا تاريخ الإنشاء الأعلى-المستوى وحدة نمطية? that has the same اسم كـ the ملف, without the ملحق, مع the أول letter محول إلى أحرف كبيرة. For مثال, consider the following ملف.

// In the file program.fs.
let x = 40

This ملف would be compiled كـ if it were written في this manner:

module Program
let x = 40

If you have multiple الوحدات النمطية في a ملف, you must استخدم a محلي وحدة نمطية? إعلان for each وحدة نمطية?. If an enclosing مساحة الاسم هو declared, these الوحدات النمطية are part of the enclosing مساحة الاسم. If an enclosing مساحة الاسم ليس declared, the الوحدات النمطية become part of the ضمنيا تاريخ الإنشاء الأعلى-المستوى وحدة نمطية?. يظهر مثال التعليمة البرمجية التالية التعليمات برمجية ملف التي تحتوي على وحدات نمطية متعددة. المحول البرمجي ضمنياً بإنشاء وحدة نمطية ذات المستوى أعلى باسم Multiplemodules، و MyModule1و MyModule2المتداخلة في هذه وحدة نمطية? ذات المستوى الأعلى.

// In the file multiplemodules.fs.
// MyModule1
module MyModule1 =
    // Indent all program elements within modules that are declared with an equal sign.
    let module1Value = 100

    let module1Function x =
        x + 10

// MyModule2
module MyModule2 =

    let module2Value = 121

    // Use a qualified name to access the function.
    // from MyModule1.
    let module2Function x =
        x * (MyModule1.module1Function module2Value)

إذا كان لديك عدة ملفات في مشروع أو في التحويل البرمجي لواحد، أو إذا كنت تقوم بإنشاء مكتبة، يجب عليك تضمين إعلان مساحة الاسم أو إعلان وحدة نمطية? في الأعلى من الملف. المحول البرمجي F# فقط يحدد اسم الوحدة نمطية ضمنياً عند وجود هو ملف واحد فقط في مشروع أو سطر الأوامر للترجمة، والتي تقوم بإنشاء أحد تطبيقات.

accessibility-modifierيمكن أن واحد مما يلي: public, private, internal. لمزيد من المعلومات، راجع التحكم بالوصول (F#). الافتراضي هو العام.

الرجوع إلى تعليمات برمجية في الوحدات النمطية

When you مرجع دالات, أنواع, و قيم من another وحدة نمطية?, you must either استخدم a qualified اسم أو فتح the وحدة نمطية?. If you استخدم a qualified اسم, you must specify the مساحات الاسم, the وحدة نمطية?, و the معرّف for the برنامج عنصر you want. You separate each part of the qualified مسار مع a dot (.), كـ follows.

Namespace1.Namespace2.ModuleName.Identifier

You can فتح the وحدة نمطية? أو واحد أو المزيد of the مساحات الاسم إلى simplify the تعليمات برمجية. For المزيد معلومات حول فتح مساحات الاسم و الوحدات النمطية, see قم باستيراد تصريحات: فتح كلمة أساسية (F#).

The following تعليمات برمجية مثال shows a لأعلى-المستوى وحدة نمطية? that يحتوي على الجميع the تعليمات برمجية لأعلى إلى the إنهاء of the ملف.

module Arithmetic

let add x y =
    x + y

let sub x y =
    x - y

إلى استخدم this تعليمات برمجية من another ملف في the same مشروع, you either استخدم qualified أسماء أو you فتح the وحدة نمطية? قبل you استخدم the دالات, كـ shown في the following أمثلة.

// Fully qualify the function name.
let result1 = Arithmetic.add 5 9
// Open the module.
open Arithmetic
let result2 = add 5 9

Nested الوحدات النمطية

الوحدات النمطية can be nested. Inner الوحدات النمطية must be indented كـ far كـ outer وحدة نمطية? تصريحات إلى indicate that they are inner الوحدات النمطية, not جديد الوحدات النمطية. For مثال, يقارن the following الثاني أمثلة. وحدة نمطية? Z هو an inner وحدة نمطية? في the following تعليمات برمجية.

module Y =
    let x = 1 

    module Z =
        let z = 5

But وحدة نمطية? Z هو a sibling إلى وحدة نمطية? Y في the following تعليمات برمجية.

module Y =
    let x = 1 

module Z =
    let z = 5

وحدة نمطية? Z هو also a sibling وحدة نمطية? في the following تعليمات برمجية, because it ليس indented كـ far كـ غير ذلك تصريحات في وحدة نمطية? Y.

module Y =
        let x = 1

    module Z =
        let z = 5

Finally, if the outer وحدة نمطية? has لا تصريحات و هو followed immediately بواسطة another وحدة نمطية? إعلان, the جديد وحدة نمطية? إعلان هو assumed إلى be an inner وحدة نمطية?, but the compiler will warn you if the ثانية وحدة نمطية? إعلان ليس indented farther than the أول.

// This code produces a warning, but treats Z as a inner module.
module Y =
module Z =
    let z = 5

إلى eliminate the تحذير, يغيّر المسافة البادئة the inner وحدة نمطية?.

module Y =
    module Z =
        let z = 5

If you want الجميع the تعليمات برمجية في a ملف إلى be في a مفرد outer وحدة نمطية? و you want inner الوحدات النمطية, the outer وحدة نمطية? does not require the علامة التساوي, و the تصريحات, including أي inner وحدة نمطية? تصريحات, that will انتقال في the outer وحدة نمطية? do not have إلى be indented. تصريحات inside the inner وحدة نمطية? تصريحات do have إلى be indented. The following تعليمات برمجية shows this حالة.

// The top-level module declaration can be omitted if the file is named
// TopLevel.fs or topLevel.fs, and the file is the only file in an
// application.
module TopLevel

let topLevelX = 5

module Inner1 =
    let inner1X = 1
module Inner2 =
    let inner2X = 5

راجع أيضًا:

المرجع

مساحات الاسم (F#)

موارد أخرى

مرجع لغة ب #