我不喜歡的東西類似,3類線的劃分在給定的文件,一個給定的線,也許,例如,對於Float
爲標題行,Long
爲中(行)在一條線上,或String
拖車線。也可以使用isHeader
,isRow
和isTrailer
來知道哪一個是。希望有幫助:
sealed abstract class HRT[+H, +R, +T] {
val isHeader: Boolean
val isRow: Boolean
val isTrailer: Boolean
}
final case class Header[+H, +R, +T](h: H) extends HRT[H, R, T] {
override val isHeader: Boolean = true
override val isRow: Boolean = false
override val isTrailer: Boolean = false
}
final case class Row[+H, +R, +T](r: R) extends HRT[H, R, T] {
override val isHeader: Boolean = false
override val isRow: Boolean = true
override val isTrailer: Boolean = false
}
final case class Trailer[+H, +R, +T](t: T) extends HRT[H, R, T] {
override val isHeader: Boolean = false
override val isRow: Boolean = false
override val isTrailer: Boolean = true
}
object Demo {
def getEntries(): Seq[HRT[Float, Long, String]] =
List(
Header(3.14f),
Row(42),
Trailer("good bye")
)
val entries = getEntries()
entries.foreach {
case Header(f) => printf("header: %f\n", f)
case Row(l) => printf("row: %d\n", l)
case Trailer(s) => printf("trailer: %s\n", s)
}
}
謝謝,這非常有幫助。我最終通過Option實現了類似的東西,其中None和Some作爲已知的子狀態:http://code.alexblack.ca/an-option-class-in-scala-with-three-states-un – 2009-11-18 15:09:42