Moduly (F#)
V kontextu jazyk F# modulu je seskupení F# kódu, například hodnoty, typy a hodnoty funkcí v programu F#.Kód v modulech seskupení pomáhá udržovat pohromadě související kód a pomáhá zabránit konfliktům názvů v programu.
// Top-level module declaration.
module [accessibility-modifier] [qualified-namespace.]module-name
declarations
// Local module declaration.
module [accessibility-modifier] module-name =
declarations
Poznámky
Modul F# je seskupení F# konstrukce kódu jako typy, hodnoty, hodnoty funkce a kód v do vazby.Je implementováno jako společné třídy language runtime (CLR), která má pouze statické členy.Existují dva typy modulu prohlášení, v závislosti na tom, zda je zahrnut celý soubor modulu: nejvyšší úrovně modul prohlášení a prohlášení místního modulu.Nejvyšší úrovně modul prohlášení zahrnuje celý soubor modulu.Nejvyšší úrovně modul prohlášení se může zobrazit pouze jako prvního prohlášení v souboru.
V syntaxi pro prohlášení nejvyšší úrovně modul nepovinné qualified-namespace je posloupnost vnořených obor názvů obsahující modul.Kvalifikovaných názvů není nutné deklarovat dříve.
Nemáte odsazení prohlášení v modulu nejvyšší úrovně.Máte všechny deklarace v modulech místní odsazení.V modulu Místní prohlášení pouze prohlášení, které jsou odsazené pod prohlášení modulu jsou součástí modulu.
Pokud kód souboru nezačíná nejvyšší úrovně modul prohlášení nebo deklarace oboru názvů, celý obsah souboru, včetně všech modulů místní stane součástí modulu implicitně vytvořené nejvyšší úrovně, který má stejný název jako soubor bez přípony, převedeny na velká písmena první písmeno.Například zvažte následující soubor.
// In the file program.fs.
let x = 40
Tento soubor by kompilován, jako by byly zapsány tímto způsobem:
module Program
let x = 40
Pokud máte více modulů v souboru, je nutné použít místní modul prohlášení pro každý modul.Jestliže je deklarována ohraničujícím oboru názvů, tyto moduly jsou součástí vnějšího oboru názvů.Pokud ohraničujícím oboru názvů není deklarován, moduly se stanou součástí modulu implicitně vytvořené nejvyšší úrovně.Následující příklad kódu ukazuje kód souboru, který obsahuje více modulů.Kompilátor vytvoří implicitně nejvyšší úrovně s názvem modulu Multiplemodules, a MyModule1 a MyModule2 jsou vnořeny v modulu nejvyšší úrovně.
// 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)
Pokud máte více souborů v projektu nebo jednoduché kompilace nebo vytváříte knihovnu, musí obsahovat deklarace oboru názvů nebo modul prohlášení na začátku souboru.Kompilátor F# pouze implicitně Určuje název modulu, pokud existuje pouze jeden soubor do příkazového řádku projektu nebo kompilace a vytváření aplikací.
The accessibility-modifier can be one of the following: public, private, internal.Další informace naleznete v tématu Řízení přístupu (F#).Výchozí hodnota je veřejné.
Odkazování na kód v modulech
Při odkazu na funkce, typy a hodnoty z jiného modulu, musíte použít úplný název nebo otevřete modul.Pokud používáte kvalifikovaný název, je nutné zadat obory názvů, modulu a identifikátor prvku program, který chcete.Oddělují jednotlivé části kvalifikovanou cestu s tečkou (.), takto.
Namespace1.Namespace2.ModuleName.Identifier
Můžete otevřít modul nebo jeden nebo více oborů názvů pro zjednodušení kódu.Další informace o otevírání obory názvů a moduly, viz Dovozních prohlášení: Otevřít klíčové (F#).
Následující příklad kódu ukazuje nejvyšší úrovně modul, který obsahuje všechny kód do konce souboru.
module Arithmetic
let add x y =
x + y
let sub x y =
x - y
Chcete-li použít tento kód z jiného souboru ve stejném projektu, buď pomocí kvalifikované názvy nebo otevřete modul před použitím funkce, jak je uvedeno v následujících příkladech.
// Fully qualify the function name.
let result1 = Arithmetic.add 5 9
// Open the module.
open Arithmetic
let result2 = add 5 9
Vnořené moduly
Moduly mohou být vnořené.Vnitřní moduly musí být odsazen jako vnější modul prohlášení označuje, že se vnitřní moduly nejsou nové moduly.Porovnejte například následující dva příklady.Modul Z je vnitřní modulu následující kód.
module Y =
let x = 1
module Z =
let z = 5
Ale modul Z je na stejné úrovni modulu Y v následujícím kódu.
module Y =
let x = 1
module Z =
let z = 5
Modul Z je také modul na stejné úrovni jako v následujícím kódu, protože není odsazen jako ostatní prohlášení v modulu Y.
module Y =
let x = 1
module Z =
let z = 5
Pokud vnější modul nemá žádné prohlášení a bezprostředně následuje prohlášení jiného modulu nakonec nový modul prohlášení považován za vnitřní modul, ale kompilátor varování Pokud druhý modul definice není odsazen dále než první.
// This code produces a warning, but treats Z as a inner module.
module Y =
module Z =
let z = 5
Chcete-li vyloučit varování odsazení vnitřní modul.
module Y =
module Z =
let z = 5
Pokud chcete všechny kód v souboru v jeden modul vnější a vnitřní moduly, vnější modul nevyžaduje znaménko rovná se a prohlášení, včetně jakékoli vnitřní modul prohlášení, které bude v modulu vnější nemusí být odsazen.Prohlášení uvnitř vnitřního modulu prohlášení musí být odsazené.Následující kód ukazuje tento případ.
// 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