我想使用提取器將String
投射到Int
。我的代碼如下所示。使用scala提取器將字符串投射到int
object Apply {
def unapply(s: String): Option[Int] = try {
Some(s.toInt)
} catch {
case _: java.lang.Exception => None
}
}
object App {
def toT[T](s: AnyRef): Option[T] = s match {
case v: T => Some(v)
case _ => None
}
def foo(param: String): Int = {
//reads a Map[String,String] m at runtime
toT[Int](m("offset")).getOrElse(0)
}
}
我得到一個運行時錯誤:java.lang.String cannot be cast to java.lang.Integer
。看來提取器根本沒有被使用。我該怎麼辦?
編輯:我的用例如下。我正在使用play,我想分析在url中傳遞的查詢字符串。我想借此查詢字符串值(字符串),並把它作爲一個Int,雙等。例如,
val offset = getQueryStringAs[Int]("offset").getOrElse(0)
爲什麼你希望它被使用? – pedrofurla 2013-02-09 22:11:10
你用「隱式轉換」標記了這個問題,你的代碼沒有隱式轉換。 – pedrofurla 2013-02-09 22:12:22
'T [T] ...案件v:T'將不起作用,T在擦除中丟失。 – pedrofurla 2013-02-09 22:13:00