Scala - Aus Tupel Tupel lesen

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Scala - Aus Tupel Tupel lesen
Hallo,

angenommen ich habe ein Tupel t1 = (v1, v2, v3, v4) und ich moechte daraus ein Tupel t2 = (v2, v3) machen. Geht das auch anders als mit t2 = (t1._2, t1._3) ?
Denn ich erhalte t1 als Rueckgabewert einer Methode und moechte die Methode nur ungern zwei mal aufrufen.


scala> ('v1, 'v2, 'v3, 'v4) match {case (a, b, c, d) => (b, c)}
res0: (Symbol, Symbol) = ('v2,'v3)

scala> (('v1, 'v2, 'v3, 'v4) match {case (a, b, c, d) => (b, c)})._1
res1: Symbol = 'v2

Ok, danke. Das bedeutet, dass ich eine Hilfsmethode brauche, deren einzige Aufgabe es ist, aus dem 4er-Tupel ein 2er-Tupel zu machen. Schade, hatte gehoft, da gibts schon eine Funktion, die flexibel ist.


Ich habe versucht, das oben beschriebene umzusetzen, aber iwie blick ich das noch nicht ganz. Sehe ich es richtig, dass wenn in Skala eine Funktion ein Tupel (Int, Int) als Eingabe erwartet und man dieser Funktion den Rueckgabewert einer anderen Funktion uebergibt, der (Int, Int) ist, dass das dann nicht geht?
Also zum Beispiel sowas:

object Test {
	def f1: Int => (Int, Int) = {
	  case a => convert(f2(a))
	}
	
	def f2: Int => (Int, Int, Int, Int) = {
	  case a => (a, a, a, a)
	}
	
	def convert: (Int, Int, Int, Int) => (Int, Int) = {
	  case (a, b, c, d) => (a, b)
	}
}

Da bekommt man in Zeile 3 eine Fehlermeldung…


Du übergibst in convert 4 Ints und nicht ein Tupel. Mit ((Int, Int, Int, Int)) ist das Problem behoben.