假設我需要在斯卡拉中將字符串轉換爲Int。如果字符串不是數字,我想返回None
而不是拋出異常。字符串到斯卡拉Int中
我發現下面solution
def toMaybeInt(s:String) = { import scala.util.control.Exception._ catching(classOf[NumberFormatException]) opt s.toInt }
是否有意義?你會改變/改善它嗎?
假設我需要在斯卡拉中將字符串轉換爲Int。如果字符串不是數字,我想返回None
而不是拋出異常。字符串到斯卡拉Int中
我發現下面solution
def toMaybeInt(s:String) = { import scala.util.control.Exception._ catching(classOf[NumberFormatException]) opt s.toInt }
是否有意義?你會改變/改善它嗎?
我會使用scala.util.Try
它返回Success
或Failure
爲可能會引發異常的計算。
scala> val zero = "0"
zero: String = 0
scala> val foo = "foo"
foo: String = foo
scala> scala.util.Try(zero.toInt)
res5: scala.util.Try[Int] = Success(0)
scala> scala.util.Try(foo.toInt)
res6: scala.util.Try[Int] = Failure(java.lang.NumberFormatException: For input string: "foo")
所以,toMaybeInt(s: String)
變爲:
def toMaybeInt(s:String) = {
scala.util.Try(s.toInt)
}
爲了得到一個選項,在任何情況下,無論是由於數量畸形可能出現的例外,
import scala.util.Try
def toOptInt(s:String) = Try(s.toInt) toOption
然後
scala> toOptInt("123")
res2: Option[Int] = Some(123)
scala> toOptInt("1a23")
res3: Option[Int] = None
此外,考慮
implicit class convertToOptInt(val s: String) extends AnyVal {
def toOptInt() = Try(s.toInt) toOption
}
因此
scala> "123".toOptInt
res5: Option[Int] = Some(123)
scala> "1a23".toOptInt
res6: Option[Int] = None
比使用'Try'其他(@ Brian的回答),我會命名方法'toIntOption'更符合標準Scala的名稱一致。 –