C'è modo di abbinare parzialmente un tuple
senza dover specificare la dimensione? Per esempio, se ho avuto una tuplaCorrisponde a una tupla di dimensioni sconosciute in scala
val v = ("Dr", "John","H", "Watson")
mi piacerebbe essere in grado di fare qualcosa di simile:
v match {
case ("Dr", : _*) => "What's up, Doc?"
case ("Mr", name, :_*) => s"Welcome, Mr. ${name}"
case _ => "Have we met?"
}
Questo non si compila, :_*
normalmente significa un numero indeterminato di parametri, ma non può essere usato in questo caso apparentemente. L'idea sarebbe di essere in grado di utilizzare questo matcher per qualsiasi tuple più grande di 2. So che posso farlo convertendo v
in un List
(per esempio) prima, voglio solo sapere se è possibile farlo con uno tuple
.
EDIT: la maggior parte delle informazioni che ho trovato sul web è this discussion, che risale al Scala 2.8, in modo da sto andando con il 'No, non si puo' rispondere.
Per quanto ne so, non c'è modo, perché le tuple di diverse dimensioni sono di diverso tipo. Ma può essere fatto con macro: l'obiettivo è generare un codice che corrisponda a tutte le dimensioni possibili. O come hai suggerito, definisci le conversioni implicite in 'Seq [Any]'. Anche questa è una soluzione sporca, e faresti meglio a chiedertelo, le tuple sono il tipo giusto da usare nel tuo problema? Forse non lo sono. –
@SargeBorsch ma tutti estendono Prodotto ;-) –
@ om-nom-nom Sì, è vero, ma se si digita Product, non si conoscono i tipi dei suoi elementi e quindi si perde l'accesso typesafe ai propri dati (è necessario per controllare manualmente/eseguire il cast dei tipi dei suoi elementi) –