Scala 在使用模式匹配时,如何将错误日志放入代码中?
我有一个函数将日期时间转换为历元,我想把一些日志放在它失败的地方。例如Scala 在使用模式匹配时,如何将错误日志放入代码中?,scala,Scala,我有一个函数将日期时间转换为历元,我想把一些日志放在它失败的地方。例如case\u=>和.getOrElse(JNothing),我该怎么做 def time_to_epoch(params: List[JValue]): JValue = params match { case JString(timestamp) :: JString(pattern) :: JString(timezone) :: Nil => Try { *** }.getOrEls
case\u=>
和.getOrElse(JNothing)
,我该怎么做
def time_to_epoch(params: List[JValue]): JValue = params match {
case JString(timestamp) :: JString(pattern) :: JString(timezone) :: Nil =>
Try {
***
}.getOrElse(JNothing) // for saying something similar to can't convert time to epoch
case _ =>
JNothing // Add a (ErrorMessage(xxxxxxx)) for saying number of parameters are invalid and what are expected inline function forma
}
对于函数式编程解决方案,您可以使用treelog,但在您的情况下确实不需要它,除非您需要严格纯净的函数
对于函数式编程解决方案,您可以使用树状图,但在您的情况下确实不需要它,除非您需要严格的纯函数。如果
time\u to\u epoch
可能失败,那么最好返回Try
而不是像JNothing
这样的特殊失败值
case class MyException(msg: String) extends Exception
def time_to_epoch(params: List[JValue]): Try[JValue] = params match {
case JString(timestamp) :: JString(pattern) :: JString(timezone) :: Nil =>
Try {
???
}
case _ =>
Failure(MyException("Invalid parameters"))
}
您可以使用match
打印错误信息:
time_to_epoch(???) match {
case Failure(e) =>
println(s"Operation failed: $e")
case _ =>
}
这样做的好处是,可以很容易地链接多个
Try
操作,而无需在每个步骤中测试失败。它允许代码在正确处理错误的同时将注意力集中在主代码路径上。如果时间到时间可能失败,那么最好返回Try
而不是像JNothing
这样的特殊失败值
case class MyException(msg: String) extends Exception
def time_to_epoch(params: List[JValue]): Try[JValue] = params match {
case JString(timestamp) :: JString(pattern) :: JString(timezone) :: Nil =>
Try {
???
}
case _ =>
Failure(MyException("Invalid parameters"))
}
您可以使用match
打印错误信息:
time_to_epoch(???) match {
case Failure(e) =>
println(s"Operation failed: $e")
case _ =>
}
这样做的好处是,可以很容易地链接多个Try
操作,而无需在每个步骤中测试失败。它允许代码在正确处理错误的同时关注主代码路径