Partager via


Déclarations d'importation : mot clé open (F#)

Une déclaration d'importation spécifie un module ou un espace de noms dont vous pouvez référencer les éléments sans utiliser de nom qualifié complet.

open module-or-namespace-name

Notes

Si vous référencez du code en utilisant chaque fois le chemin qualifié complet de l'espace de noms ou du module, le code résultant peut être difficile à écrire, à lire et à gérer. Vous pouvez utiliser à la place le mot clé open pour les modules et les espaces de noms fréquemment utilisés. De cette façon, lorsque vous référencez un membre de ce module ou de cet espace de noms, vous pouvez utiliser la forme abrégée du nom au lieu du nom qualifié complet. Ce mot clé est semblable au mot clé using en C#, using namespace en Visual C++ et Imports en Visual Basic.

Le module ou l'espace de noms fourni doit être dans le même projet ou dans un projet ou un assembly référencé. Si ce n'est pas le cas, vous pouvez ajouter une référence au projet ou utiliser -reference l'option de ligne de - commande (ou son abréviation, -r). Pour plus d’informations, consultez Options du compilateur (F#).

La déclaration d'importation rend les noms disponibles dans le code qui suit la déclaration, jusqu'à la fin de l'espace de noms, du module ou du fichier englobant.

Lorsque vous utilisez plusieurs déclarations d'importation, elles doivent apparaître sur des lignes distinctes.

Le code suivant illustre l'utilisation du mot clé open pour simplifier le code.

// Without the import declaration, you must include the full 
// path to .NET Framework namespaces such as System.IO. 
let writeToFile1 filename (text: string) =
  let stream1 = new System.IO.FileStream(filename, System.IO.FileMode.Create)
  let writer = new System.IO.StreamWriter(stream1)
  writer.WriteLine(text)

// Open a .NET Framework namespace. 
open System.IO

// Now you do not have to include the full paths. 
let writeToFile2 filename (text: string) =
  let stream1 = new FileStream(filename, FileMode.Create)
  let writer = new StreamWriter(stream1)
  writer.WriteLine(text)

writeToFile2 "file1.txt" "Testing..."

Le compilateur F# n'émet pas d'erreur ni d'avertissement lorsque des ambiguïtés se produisent lorsque le même nom se produit dans plusieurs modules ou espace de noms ouverts. Lorsque des ambiguïtés se produisent, F# donne la priorité au module ou à l'espace de noms ouvert le plus récemment. Par exemple, dans le code suivant, empty signifie Seq.empty, bien que empty se trouve à la fois dans les modules List et Seq.

open List
open Seq
printfn "%A" empty

Par conséquent, soyez prudent lorsque vous ouvrez des modules ou des espaces de noms tels que List ou Seq qui contiennent des membres qui ont des noms identiques ; songez plutôt à utiliser des noms qualifiés. Vous devez éviter toute situation dans laquelle le code dépend de l'ordre des déclarations d'importation.

Espaces de noms qui sont ouverts par défaut

Certains espaces de noms sont si souvent utilisés dans le code F# qu'ils sont ouverts implicitement sans recours à une déclaration d'importation explicite. Le tableau suivant répertorie les espaces de noms ouverts par défaut.

Espace de noms

Description

Microsoft.FSharp.Core

Contient des définitions de type F# de base pour les types intégrés tels qu'int et float.

Microsoft.FSharp.Core.Operators

Contient des opérations arithmétiques de base telles que + et *

Microsoft.FSharp.Collections

Contient des classes de collection immuables telles que List et Array.

Microsoft.FSharp.Control

Contient des types pour les constructions de contrôle telles que l'évaluation tardive et les workflows asynchrones.

Microsoft.FSharp.Text

Contient des fonctions pour l'E/S mis en forme, par exemple la fonction printf.

Attribut AutoOpen

Vous pouvez appliquer l'attribut AutoOpen à un assembly si vous voulez ouvrir automatiquement un espace de noms ou un module lorsque l'assembly est référencé. Vous pouvez également appliquer l'attribut AutoOpen à un module pour ouvrir automatiquement ce module lorsque le module ou l'espace de noms parent est ouvert. Pour plus d’informations, consultez Core.AutoOpenAttribute, classe (F#).

Atribut RequireQualifiedAccess

Certains modules, enregistrements, ou types d'union peuvent spécifier l'attribut RequireQualifiedAccess. Lorsque vous référencez les éléments de référence de ces modules, enregistrements, ou unions, vous devez utiliser un nom qualifié que vous incluez une déclaration d'importation ou non. Si vous utilisez cette attribut de manière stratégique sur des types qui définissent des noms fréquemment utilisés, vous contribuez à éviter des collisions de noms et rendre ainsi le code plus résistant aux modifications dans les bibliothèques. Pour plus d’informations, consultez Core.RequireQualifiedAccessAttribute, classe (F#).

Voir aussi

Référence

Espaces de noms (F#)

Modules (F#)

Autres ressources

Référence du langage F#