簡體   English   中英

Scala:遞歸匹配案例?

[英]Scala: recursive match case?

我有兩個類的特征:具有名稱(字符串)和子項(字符串列表)的 C1,以及具有文本(字符串)的 C2。 基本上,我想選擇所有 C2 類以獲取其字符串中的文本。 但是,這些 C2 類是 C1 類的子類。 例如,它是這樣的: C1("first", List(C1("firstchild", List(C2("text"))))

我的想法是做一個遞歸匹配案例,當它找到一個 C2 類來給我里面的文本時停止。 如果它找到一個 C1 類,它會從這個類的孩子開始(然后如果它找到一個 C2 類,它會給我文本,如果它找到一個 C1 類,如果從它的孩子開始,等等) . 但我堅持做遞歸部分。 我的意思是,匹配案例似乎只是某種類型,所以我必須將每個案例都設為一個單位?

請問有什么想法嗎?

import scala.annotation.tailrec

trait C {
  def getName: String
}

case class C1(private val name: String, children: List[C]) extends C {
  @tailrec
  private def rec(children: Seq[C]): String = {
    children match {
      case Nil => name
      case h :: t => h match {
        case c1: C1 => rec(c1.children)
        case c2: C2 => c2.getName
      }
    }
  }

  def getName: String = rec(children)
}

case class C2(private val name: String) extends C {
  def getName: String = name
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM