【发布时间】:2010-07-13 15:14:43
【问题描述】:
您将如何实现通过正则表达式解析某些输入并将已建立的字符串转换为其他类型的类?我的做法是:
class ARegex[T](regex:Regex, reform:Option[String => T]){
def findFirst(input:String):Option[T] = {
(regex.findFirstIn(input), reform) match{
case (None, _) => None
case (Some(s), None) => Some(s) // this won't compile because of type mismatch
case (Some(s), Some(fun)) => Some(fun(s))
}
}
}
class BRegex[T](regex:Regex, reform:Option[String => T]) {
def findFirst(input:String) = { //returns Option[Any] - erasure
(regex.findFirstIn(input), reform) match{
case (None, _) => None
case (Some(s), None) => Some(s)
case (Some(s), Some(fun)) => Some(fun(s))
}
}
}
【问题讨论】:
-
T可以是任何东西。T和String的唯一常见超类型是Any。如果你有时想返回Some[String],有时想返回Some[T](或None),那么Option[Any]findFirst的返回类型最多可以说。