In Python è possibile fare qualcosa di simile:Scala equivalente a Python tornare più elementi
def blarg():
return "blargidy", "blarg"
i, j = blargh()
C'è qualcosa di simile disponibile in scala?
In Python è possibile fare qualcosa di simile:Scala equivalente a Python tornare più elementi
def blarg():
return "blargidy", "blarg"
i, j = blargh()
C'è qualcosa di simile disponibile in scala?
è possibile restituire una tupla:
def blarg = ("blargidy", "blarg")
val (i, j) = blarg
Nota la sintassi pattern-matching per l'assegnazione variabili in parallelo: questo funziona per qualsiasi motivo, non solo per le tuple. Quindi, ad esempio:
val list = 1 :: 2 :: 3 :: Nil
val x :: y = list // x = 1 and y = 2 :: 3 :: Nil
Mi rendo conto che questa è una domanda vecchia, ma c'è un altro modo per ottenere lo stesso. Non so se c'è qualche svantaggio, ma il vantaggio è che i valori restituiti sono "nominati", rendendo il codice un po 'più auto-esplicativo.
(testato su scala 2,11)
package test.scala.misc
object TestReturnMultipleNamedValues extends App {
val s = getMultipleNamedValues
println(s"changed=${s.dsChanged} level=${s.dsLevel}")
/** Returns an anonymous structure with named members.
* */
def getMultipleNamedValues() : {val dsChanged : Boolean;val dsLevel : Int} = {
new {
val dsChanged = true
val dsLevel = 1
}
}
}
Oppure utilizzare una classe case in modo che l'abbinamento di modelli funzioni –
Impressionante, grazie! – dave
Questo è in realtà proprio come funziona in Python. –
@KarlKnechtel, solo se il numero di elementi restituiti corrisponde al numero di variabili. Altrimenti si ottiene l'errore "troppi valori da decomprimere", che è ciò che si otterrebbe in Python nel secondo esempio. – dave