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
操作,而无需在每个步骤中测试失败。它允许代码在正确处理错误的同时关注主代码路径