如何收集错误是scala的问题,然后将所有错误一起抛出
以下是我的功能:如何收集错误是scala的问题,然后将所有错误一起抛出,scala,error-handling,jvm,Scala,Error Handling,Jvm,以下是我的功能: val timeComparator: Function[String, String] = new Function[String, String] { def something() { //Does some time calculation } override def apply(element: CharSequence, element1: CharSequence): Any = { if (something(parameter1,
val timeComparator: Function[String, String] = new Function[String, String] {
def something() {
//Does some time calculation
}
override def apply(element: CharSequence, element1: CharSequence): Any = {
if (something(parameter1, parameter2)) {
Left(sys.error("Does not work"))
}
}
}
val callingFunction: Unit = {
timeComparator(parameter1, parameter2)
}
trait Function[A, B, C] {
def apply(element : String, element1 :String): Any
}
现在,每当有新数据可用时,都会运行此代码,如果失败,则会抛出一个错误。我如何收集这些错误,而不是处理数据并连续抛出错误,我希望它一起处理所有数据(而不是抛出错误),然后在最后抛出类似“这是一个失败的50个数据点的列表”的东西,本质上是累积错误,而不是在创建错误时抛出错误。我是Scala新手,不太熟悉Scala中的错误处理。您不能收集多个错误,然后“抛出所有错误”。您可以做的是收集包装在
Try.Failure()中的Throwable
s
我通常会尝试通过将其插入到您的用例中来演示这个概念,但您的“伪代码”毫无意义,也无法阐明您试图实现的目标。因此,我将提供一个简单的示例,希望您能够将其转移到您的情况中
这里有一个方法可以抛出两种不同类型的错误
def calc(in :Int) :Int =
if (4/in < 1) //can throw ArithmeticException
throw new Error("too big") //can throw java.lang.Error
else
4 * in
从这里我们可以区分好与坏,并据此采取行动
val (good,bad) = results.partition(_.isSuccess)
report_these_numbers(good.map(_.get)) //Seq(4, 8, 12, 16)
log_these_errors(bad) //Seq(Failure(java.lang.ArithmeticException: / by zero)
// , Failure(java.lang.Error: too big))
您不能收集多个错误,然后“抛出所有错误”。您可以做的是收集包装在Try.Failure()中的Throwable
s
我通常会尝试通过将其插入到您的用例中来演示这个概念,但您的“伪代码”毫无意义,也无法阐明您试图实现的目标。因此,我将提供一个简单的示例,希望您能够将其转移到您的情况中
这里有一个方法可以抛出两种不同类型的错误
def calc(in :Int) :Int =
if (4/in < 1) //can throw ArithmeticException
throw new Error("too big") //can throw java.lang.Error
else
4 * in
从这里我们可以区分好与坏,并据此采取行动
val (good,bad) = results.partition(_.isSuccess)
report_these_numbers(good.map(_.get)) //Seq(4, 8, 12, 16)
log_these_errors(bad) //Seq(Failure(java.lang.ArithmeticException: / by zero)
// , Failure(java.lang.Error: too big))
中未闭合的括号(something(parameter1,parameter2)
如果(…)Left else None
没有任何意义,尤其是如果您想返回单元
的话。请看一看。我确信您已经注意到这是一种伪代码,不要关注文字细节,这段代码只是解释我希望实现的目标。@MilapJhumkhawala虽然我们不需要您的代码,但我们无法帮助您调试我们看不到的代码。在这种情况下,我不知道某物
返回什么,也不知道为什么一个函数将左
或单元
作为任何
返回会很有用。是否有副作用在某个地方发生,而你只想累积错误?你需要有效结果和返回的错误吗?未关闭的paren在中存在(某物(参数1,参数2)
如果(…)Left else None
没有任何意义,尤其是如果您想返回单元
的话。请看一看。我确信您已经注意到这是一种伪代码,不要关注文字细节,这段代码只是解释我希望实现的目标。@MilapJhumkhawala虽然我们不需要您的代码,但我们无法帮助您调试我们看不到的代码。在这种情况下,我不知道某物
返回什么,也不知道为什么将左
或单元
作为任何
返回的函数会很有用。是否有副作用在某处发生,而您只想累积错误?您需要有效结果和返回的错误吗?