Non mi sembra molto utile ripetere sempre una definizione di tuple lungo tutta la linea ogni volta che ne ho bisogno. Posso solo nominarlo e usare come nome del tipo? Sarebbe bello per citarne i suoi campi anche invece di utilizzare ._1, ._2 eccPosso nominare una tupla (definire una struttura?) In Scala 2.8?
risposta
Per quanto riguarda la prima domanda, si può semplicemente utilizzare un tipo di alias:
type KeyValue = (Int, String)
E, naturalmente, Scala è un object-oriented di lingua, in modo per quanto riguarda il secondo su come specializzare una tupla, la parola magica è eredità:
case class KeyValue(key: Int, value: String) extends (Int, String)(key, value)
Questo è tutto. La classe non ha nemmeno bisogno di un corpo.
val kvp = KeyValue(42, "Hello")
kvp._1 // => res0: Int = 42
kvp.value // => res1: String = "Hello"
Si noti, tuttavia, che eredita da classi case (che Tuple2
è), è deprecato e potrebbe essere annullato in futuro. Ecco il compilatore di avviso che si ottiene per la definizione della classe di cui sopra:
avvertimento: caso classe
class KV
ha cassa classe antenataclass Tuple2
. Questo è stato deprecato per complicare indebitamente sia l'utilizzo che l'implementazione. Dovresti invece usare gli estrattori per la corrispondenza dei modelli sui nodi non foglia.
L'alias di tipo va bene per denominare la Tupla, ma provare invece a utilizzare una classe di caso. Sarete in grado di utilizzare i parametri denominati
Esempio con parametri:
def foo(a : Int) : (Int, String) = {
(a,"bar")
}
val res = foo(1)
val size = res._1
val name= res._2
Con una classe case:
case class Result(size : Int , name : String)
def foo(a : Int) : Result = {
Result(a,"bar")
}
val res = foo(1)
val size = res.size
val name= res.name
Ecco una soluzione che crea un tipo di alias e un oggetto di fabbrica.
scala> type T = (Int, String)
defined type alias T
scala> object T { def apply(i: Int, s: String): T = (i, s) }
defined module T
scala> new T(1, "a")
res0: (Int, String) = (1,a)
scala> T(1, "a")
res1: (Int, String) = (1,a)
Tuttavia, come altri hanno già detto, probabilmente dovresti creare una classe di caso.
Sebbene, come altri hanno già detto, le classi (caso) esplicite sono le migliori in senso generale.
Tuttavia per gli scenari localizzate quello che si può fare è quello di utilizzare il tuple extractor per migliorare la leggibilità del codice:
val (first, second) = incrementPair(3, 4)
println(s"$first ... $second")
Dato un metodo che restituisce una tupla:
def incrementPair(pair: (Int, Int)) : (Int, Int) = {
val (first, second) = pair
(first + 1, second + 1)
}
- 1. Perché Scala costruisce una nuova tupla quando spacchetta una tupla?
- 2. Posso definire una mappa la cui chiave è una struttura?
- 3. scala - aggiungi una tupla all'elencoBuffer
- 4. Come si implementa una raccolta in Scala 2.8?
- 5. Corrisponde a una tupla di dimensioni sconosciute in scala
- 6. come definire una struttura come in C
- 7. Come si specifica una matrice statica in un'annotazione Scala 2.8?
- 8. Scala 2.8 Breakout
- 9. Scala trasforma l'elenco di tuple in una tupla di liste
- 10. Affettare Scala Scala con tupla
- 11. Come definire una funzione Scala generica anonima?
- 12. #define una tupla in C
- 13. Come creare una tupla di una tupla vuota in Python?
- 14. possibile definire una funzione all'interno di una struttura C?
- 15. Pacchetto modificatore privato in Scala 2.8
- 16. iterazioni su una tupla
- 17. inconsistenza di scala 2.8 collezioni?
- 18. scala tipo tupla composizione
- 19. Come posso definire una variabile in XAML?
- 20. In Scala, c'è un modo semplice per convertire una classe di case in una tupla?
- 21. Come nominare una costante in Objective-C?
- 22. Come convertire una matrice in una tupla?
- 23. Posso distruggere una struttura in C++?
- 24. Come appiattire una tupla annidata?
- 25. come passare una stringa * scala vararg a un metodo Java utilizzando Scala 2.8
- 26. Regole sull'utilizzo un'istruzione case per distruggere una tupla a Scala
- 27. definire una funzione scala in un modello di gioco
- 28. È possibile definire una variabile locale del costruttore in Scala?
- 29. Scala Decostruzione tupla
- 30. Come dividere una tupla?
Non tuple non funzionano più velocemente di caso classi? Il compito è l'elaborazione complessa di grandi quantità di dati semplici, una sorta di calcolo del numero. – Ivan
@Ivan: Tuples * sono * case classes, vero? –
Le tuple sono in effetti case classes! –