Tuple (F#)
Una tupla è un raggruppamento di valori senza nome ma ordinati, di tipi potenzialmente diversi.
( element , ... , element )
Note
Ogni elemento element nella sintassi precedente può essere qualsiasi espressione.
Esempi
Esempi di tupla includono coppie, triple e così via dello stesso tipo o di tipi diversi.Alcuni esempi sono indicati nel codice riportato di seguito.
// Tuple of two integers.
( 1, 2 )
// Triple of strings.
( "one", "two", "three" )
// Tuple of unknown types.
( a, b )
// Tuple that has mixed types.
( "one", 1, 2.0 )
// Tuple of integer expressions.
( a + 1, b + 1)
Recupero di singoli valori
È possibile utilizzare i criteri di ricerca per accedere ai nomi e assegnarli per gli elementi della tupla, come indicato nel codice seguente.
let print tuple1 =
match tuple1 with
| (a, b) -> printfn "Pair %A %A" a b
È possibile utilizzare modelli di tuple in associazioni let come indicato di seguito.
let (a, b) = (1, 2)
In questo modo, i valori a e b vengono associati contemporaneamente.Se è necessario solo un elemento della tupla, è possibile utilizzare il carattere jolly (carattere di sottolineatura) per evitare di creare un nuovo nome per una variabile non necessaria.
let (a, _) = (1, 2)
Le funzioni fst e snd restituiscono, rispettivamente, il primo e il secondo elemento di una tupla.
let c = fst (1, 2)
let d = snd (1, 2)
Non esiste una funzione incorporata che restituisca il terzo elemento di una tripla, ma è possibile scriverne agevolmente una nel modo indicato di seguito.
let third (_, _, c) = c
In genere, è consigliabile utilizzare la corrispondenza dei modelli per accedere ai singoli elementi di una tupla.
Utilizzo di tuple
Le tuple offrono un metodo pratico per restituire più valori da una funzione, come mostrato nell'esempio seguente.In questo esempio viene eseguita la divisione di numeri interi e viene restituito il risultato arrotondato dell'operazione come primo membro di una coppia di tuple e il resto come secondo membro della coppia.
let divRem a b =
let x = a / b
let y = a % b
(x, y)
Le tuple possono inoltre essere utilizzate come argomenti delle funzioni se si desidera evitare di sottoporre gli argomenti della funzione a currying implicito, eseguito dalla normale sintassi della funzione.
let sumNoCurry (a, b) = a + b
La sintassi comune per definire la funzione let sum a b = a + b consente di definire una funzione che corrisponde all'applicazione parziale del primo argomento della funzione, come indicato nel codice seguente.
let addTen = sum 10
let result = addTen 95
// Result is 105.
Utilizzando una tupla come parametro, è possibile disabilitare il currying.Per ulteriori informazioni, vedere l'argomento relativo all'applicazione parziale di argomenti in Funzioni (F#).
Nomi dei tipi di tupla
Se si scrive il nome di un tipo che equivale a una tupla, il simbolo * viene utilizzato per separare gli elementi.Per una tupla costituita da int, float e string (ad esempio, (10, 10.0, "ten")), il tipo verrebbe scritto nel modo seguente.
int * float * string
Form compilato di tuple
Se si utilizzano esclusivamente tuple di F# senza esporle ad altri linguaggi e se non si definisce una destinazione per una versione di .NET Framework precedente alla versione 4, è possibile ignorare questa sezione.
Le tuple vengono compilate in oggetti di uno di vari tipi generici, ognuno denominato Tuple, con overload sul grado o sul numero di parametri di tipo.I tipi di tupla risultano in questo formato se visualizzati da un altro linguaggio, ad esempio C# o Visual Basic, o se si utilizza uno strumento che non riconosce i costrutti F#.I tipi Tuple sono stati introdotti in .NET Framework 4.Se si definisce una destinazione per una versione precedente di .NET Framework, il compilatore utilizza versioni di System.Tuple dalla versione del 2.0 della libreria di base di F#.I tipi di questa libreria vengono utilizzare esclusivamente per applicazioni destinate alle versioni 2.0, 3.0 e 3.5 di .NET Framework.L'inoltro del tipo viene utilizzato per garantire la compatibilità binaria tra i componenti F# di .NET Framework 2.0 e .NET Framework 4.