无需求助于宏或外部库,您可以执行以下简单操作:
object ProcessingMechanism {
def unapply(str: String): Option[ProcessingMechanism] = str match {
case "V1" => Some(PMv1)
case "V2" => Some(PMv2)
// ...
case _ => None
}
}
// to use it:
def methodAcceptingExternalInput(processingMethod: String) = processingMethod match {
case ProcessingMethod(pm) => // do something with pm whose type is ProcessingMethod
}
// or simply:
val ProcessingMethod(pm) = externalString
正如在对该问题的评论中所建议的,最好将该特征标记为
sealed
.