簡體   English   中英

如何只對類而不是Scala中的類屬性進行模式匹配?

[英]How to patten match on just the class, not the class attributes in Scala?

我有一些有時具有許多屬性的類,這些類非常大,所以我不想將其轉換為case類。

但是,我仍然希望能夠對類類型進行模式匹配。

我一直在做以下事情:

object CourseSemester {
  implicit val courseSemesterCase = (entity: CourseSemester) 
                     => { CourseSemesterCase(entity) }
  case class CourseSemesterCase(entity: CourseSemester)
}

import CourseSemester._

class CourseSemester(val courses: List[Course],
                     val startDate: EventDate,
                     val endDate: EventDate,
                     val createdUpdatedBy: CreatedUpdatedBy,
             ... there are so many attributes... ) {
  def totalCoursesInSemester: Int = courses.length
}

這使我可以在CourseSemester上與案例類進行匹配,因此我可以在模式匹配中識別類類型。 例如:

  val c = new CourseSemester(...)
  c match {
    case CourseSemesterCase(a) => { }
    case SomeOtherCase(b) => { }
  }

這是一種合理的方法,還是有更好的方法?

您可以使用Type Ascription

c match {

    case cs : CourseSemester => // use cs
    case s : SomeOther       => // s is object of SomeOther type

}

暫無
暫無

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

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