2011-12-20 7 views

Odpowiedz

31

Możesz powrócić krotki:

def blarg = ("blargidy", "blarg") 

val (i, j) = blarg 

Zwróć uwagę na składnie dopasowywania wzorca dla równoległego zmiennej przypisania: to działa dla każdego wzorca, a nie tylko na krotki. Na przykład:

val list = 1 :: 2 :: 3 :: Nil 

val x :: y = list // x = 1 and y = 2 :: 3 :: Nil 
+0

niesamowite, dzięki! – dave

+3

To tak naprawdę działa tak samo w Pythonie. –

+1

@KarlKnechtel, tylko jeśli liczba zwróconych elementów odpowiada liczbie zmiennych. W przeciwnym razie pojawi się błąd "zbyt wiele wartości do rozpakowania", co można uzyskać w Pythonie w drugim przykładzie. – dave

6

Zdaję sobie sprawę, że jest to stare pytanie, ale jest inny sposób na osiągnięcie tego samego. Nie wiem, czy jest jakaś jej minus, ale zaletą jest to, że zwracane wartości są "nazwane", co czyni kod nieco bardziej zrozumiałym.

(testowane na 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 
     } 
    } 
} 
+1

Lub użyj klasy case, aby dopasować do wzorca –

Powiązane problemy