Ich möchte auf verschiedene Segmente eines list
in scala
auf den Typen des head
und tail
pattern match
:Wie Muster Kopf und Schwanz Typen einer Skala Liste Muster?
class Solution07 extends FlatSpec with ShouldMatchers {
"plain recursive flatten" should "flatten a list" in {
val list1 = List(List(1, 1), 2, List(3, List(5, 8)))
val list1Flattened = List(1, 1, 2, 3, 5, 8)
flattenRecur(list1) should be (list1Flattened)
}
def flattenRecur(ls: List[Any]): List[Int] = ls match {
case (head: Int) :: (tail: List[Any]) => head :: flattenRecur(tail)
case (head: List[Int]) :: (tail: List[Any]) => head.head :: flattenRecur(head.tail :: tail)
case (head: List[Any]) :: (tail: List[Any]) => flattenRecur(head) :: flattenRecur(tail) // non-variable type... on this line.
}
}
ich:
Error:(18, 17) non-variable type argument Int in type pattern List[Int] (the underlying of List[Int]) is unchecked since it is eliminated by erasure case (head: List[Int]) :: (tail: List[Any]) => head.head :: flattenRecur(head.tail :: tail) ^
Was bin ich? Wie ist es möglich für mich, Muster auf die head
und tail
's Typen der Liste?
versuchen ersetzen 'case (head: Liste [Int]) :: (tail: Liste [Any]) =>' mit 'case ((headhead: Int) :: (headtail: Liste [Beliebige])) :: (tail: List [Any]) => 'Das würde Ihnen erlauben, den Schreibvorgang zu löschen – ayvango
Das Problem ist für die Zeile' case (head: Liste [Any]) :: (tail: List [Any]) 'Sie haben a erwähnt andere Linie, soll das auch dieser Linie helfen ??? – Jas
die dritte Wahl steht im Konflikt mit der zweiten. Sie können also entweder die zweite oder die dritte Wahl einstellen. Da die dritte Wahl allgemeiner ist, ist es leichter, die zweite genauere – ayvango