Giusto per chiarire, quando dico assigment multipla, assegnazione parallela, destrutturazione legano intendo il seguente pattern matching gemmaassegnazione multipla dei non tuple in scala
scala> val (x,y) = Tuple2("one",1)
x: java.lang.String = one
y: Int = 1
che assegna "one"
-x
e 1
-y
.
stavo cercando di fare
val (x,y) = "a b".split()
mi aspettavo che avrebbe tentato di scala modello abbinare la matrice con il modello, e sarebbe un'eccezione di runtime se la lunghezza della matrice non corrisponda alla lunghezza del modello.
Tutti i miei tentativi di convertire facilmente un Array
in un Tuple2
erano inutili.
scala> Tuple2(Array(1,2):_*)
<console>:7: error: wrong number of arguments for method apply: (T1,T2)(T1, T2)
in object Tuple2
Tuple2(Array(1,2):_*)
^
scala> Tuple2(Array(1,2).toList:_*)
<console>:7: error: wrong number of arguments for method apply: (T1,T2)(T1, T2)
in object Tuple2
Tuple2(Array(1,2).toList:_*)
Esiste un modo pulito per utilizzare più assegnazioni con matrici o elenchi?
Funziona perché l'oggetto 'Array' include il metodo' unapplySeq', rendendolo utilizzabile come Pattern di Exractor. 'Array.unapplySeq (" XXX, YYY, ZZZ ".split (", ")' è chiamato, restituendo 'Some (ArrayBuffer (XXX, YYY, ZZZ))', che è un 'Some', e contiene tre elementi per associare a 'x',' y' e 'z'. – retronym