1
要將字符串解析爲int,我們可以執行theString.toInt
和布爾值theString.toBoolean
。我怎樣才能使這個通用?將字符串解析爲布爾值或整數
我想以某種方式進行參數化的功能,這樣我可以嘗試解析字符串作爲一個布爾值或者int,處理錯誤和返回的錯誤違約等
我有這樣的:
def tryParsing[T: TypeTag](value: String)(implicit errorAccumulator: Accumulator[Int]): Option[T] = {
// scala's .toBoolean only permits exactly "true" or "false", not numeric booleans.
val validBooleans = Map(
"true" -> true,
"false" -> false,
"1" -> true,
"0" -> false
)
import scala.reflect.runtime.universe._
// doesn't work. Also, using TypeTag doesn't seem to work.
typeOf[T] match {
case t if t <:< typeOf[Boolean] =>
val result = validBooleans.get(value.asInstanceOf[String].toLowerCase)
if (result.isEmpty) {
logger.warn(s"An error occurred parsing the boolean value `$value`")
errorAccumulator += 1
}
result.asInstanceOf[Option[T]]
case _ =>
Try(value.asInstanceOf[T]) match {
case Success(x) => Some(x: T)
case Failure(e) =>
logger.warn(s"An parsing error occurred: $e")
errorAccumulator += 1
None
}
}
}
我無法匹配類型標記。我想這是因爲如果value
是T
類型,那麼typetag會阻止它的類型被刪除。但在這裏,我想打電話給此類似:
tryParsing[Boolean]("1") // value from variable
我怎麼能匹配類型或以其他方式做什麼,我想在斯卡拉2.10辦?
使用像'高清解析(X:字符串)=嘗試(x.toBoolean).orElse(TRY(x.toInt ))。GET'。要返回默認值,請使用'getOrElse'。 –
我需要增加累加器和日誌分析錯誤的錯誤,所以我想集中該邏輯。我必須解析大量(<20)不同的數據位。 – jbrown