Eventi
Creare app e agenti di intelligenza artificiale
17 mar, 21 - 21 mar, 10
Partecipa alla serie meetup per creare soluzioni di intelligenza artificiale scalabili basate su casi d'uso reali con altri sviluppatori ed esperti.
Iscriviti subitoQuesto browser non è più supportato.
Esegui l'aggiornamento a Microsoft Edge per sfruttare i vantaggi di funzionalità più recenti, aggiornamenti della sicurezza e supporto tecnico.
open
Una dichiarazione di importazione specifica un modulo o uno spazio dei nomi ai cui elementi è possibile fare riferimento senza usare un nome completo.
open module-or-namespace-name
open type type-name
Fare riferimento al codice usando lo spazio dei nomi completo o il percorso del modulo ogni volta che è possibile creare codice difficile da scrivere, leggere e gestire. È invece possibile usare la parola chiave open
per i moduli e gli spazi dei nomi usati di frequente in modo che quando si fa riferimento a un membro di tale modulo o spazio dei nomi, è possibile usare la forma breve del nome anziché il nome completo. Questa parola chiave è simile alla parola chiave using
in C#, using namespace
in Visual C++ e Imports
in Visual Basic.
Il modulo o lo spazio dei nomi specificato deve trovarsi nello stesso progetto o in un progetto o un assembly a cui si fa riferimento. In caso contrario, è possibile aggiungere un riferimento al progetto oppure usare l'opzione della riga di comando -reference
(o la relativa abbreviazione, -r
). Per altre informazioni, vedere Opzioni del compilatore.
La dichiarazione di importazione rende disponibili i nomi nel codice che segue la dichiarazione, fino alla fine dello spazio dei nomi, del modulo o del file.
Quando si usano più dichiarazioni di importazione, devono essere visualizzate in righe separate.
Il codice seguente illustra l'uso della parola chiave open
per semplificare il codice.
// 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..."
Il compilatore F# non genera un errore o un avviso quando si verificano ambiguità, quando si verifica lo stesso nome in più moduli o spazi dei nomi aperti. Quando si verificano ambiguità, F# dà la preferenza al modulo o allo spazio dei nomi aperto più di recente. Ad esempio, nel codice seguente, empty
significa Seq.empty
, anche se empty
si trova sia nei moduli List
che Seq
.
open List
open Seq
printfn %"{empty}"
Prestare quindi attenzione quando si aprono moduli o spazi dei nomi, ad esempio List
o Seq
che contengono membri con nomi identici; prendere invece in considerazione l'uso dei nomi qualificati. È consigliabile evitare qualsiasi situazione in cui il codice dipende dall'ordine delle dichiarazioni di importazione.
F# supporta open
in un tipo simile al seguente:
open type System.Math
PI
Verranno esposti tutti i campi statici e i membri accessibili nel tipo.
È anche possibile open
definire in F# tipi di record e tipi di unione discriminati per esporre membri statici. Nel caso di unioni discriminate, è anche possibile esporre i casi di unione. Ciò può essere utile per accedere ai casi di unione in un tipo dichiarato all'interno di un modulo che potrebbe non essere necessario aprire, come illustrato di seguito:
module M =
type DU = A | B | C
let someOtherFunction x = x + 1
// Open only the type inside the module
open type M.DU
printfn "%A" A
Moduli annidati come
module A =
module B =
...
può essere aperto tramite
open A // opens A
open B // opens A.B
Per aprire solo moduli completi o spazi dei nomi prefissi con l'identificatore global
:
open global.A // works
open global.B // this now fails
open global.A.B // works
Alcuni spazi dei nomi vengono usati così frequentemente nel codice F# che vengono aperti in modo implicito senza la necessità di una dichiarazione di importazione esplicita. Nella tabella seguente sono illustrati gli spazi dei nomi aperti per impostazione predefinita.
Spazio dei nomi | Descrizione |
---|---|
FSharp.Core |
Contiene definizioni di tipo F# di base per i tipi predefiniti, ad esempio int e float . |
FSharp.Core.Operators |
Contiene operazioni aritmetiche di base, ad esempio + e * . |
FSharp.Collections |
Contiene classi di raccolta non modificabili, ad esempio List e Array . |
FSharp.Control |
Contiene tipi per costrutti di controllo, ad esempio la valutazione differita ed espressioni asincrone. |
FSharp.Text |
Contiene funzioni per operazioni di IO formattate, ad esempio la funzione printf . |
È possibile applicare l'attributo AutoOpen
a un assembly se si desidera aprire automaticamente uno spazio dei nomi o un modulo quando si fa riferimento all'assembly. È anche possibile applicare l'attributo AutoOpen
a un modulo per aprire automaticamente tale modulo all'apertura del modulo padre o dello spazio dei nomi. Per altre informazioni, vedere AutoOpenAttribute.
Alcuni moduli, record o tipi di unione possono specificare l'attributo RequireQualifiedAccess
. Quando si fa riferimento a elementi di tali moduli, record o unioni, è necessario usare un nome completo indipendentemente dal fatto che si includa una dichiarazione di importazione. Se si usa questo attributo in modo strategico sui tipi che definiscono nomi di uso comune, è possibile evitare conflitti di nomi e rendere il codice più resiliente alle modifiche nelle librerie. Per ulteriori informazioni, vedere RequireQualifiedAccessAttribute.
Feedback su .NET
.NET è un progetto di open source. Selezionare un collegamento per fornire feedback:
Eventi
Creare app e agenti di intelligenza artificiale
17 mar, 21 - 21 mar, 10
Partecipa alla serie meetup per creare soluzioni di intelligenza artificiale scalabili basate su casi d'uso reali con altri sviluppatori ed esperti.
Iscriviti subito