Scala "Try" return 类型和异常处理
Scala "Try" return type and exception handling
我是 Scala 的新手,现在正在尝试完成一个练习。我如何 return 一个 InvalidCartException 而函数 return 类型是 Try[Price]
//Success: return the calculated price
//Failure: InvalidCartException
def calculateCartPrice(cart:Cart): Try[Price] = {
if(isCartValid(cart)) {
//Calculations happen here
return Try(Price(totalPrice));
}
}
def isCartValid(cart: Cart): Boolean = {
//THIS WORKS FINE
}
感谢您的帮助
Try
会帮你捕获异常,所以把能抛出异常的代码放在那里。例如
def divideOneBy(x: Int): Try[Int] = Try { 1 / x}
divideOneBy(0) // Failure(java.lang.ArithmeticException: / by zero)
如果你有一个 Try
并且你想在你有一个 Failure
时抛出异常,那么你可以使用模式匹配来做到这一点:
val result = divideByOne(0)
result match {
case Failure(exception) => throw exception
case Success(_) => // What happens here?
}
The Neophyte's Guide to Scala 对刚接触 Scala 的人有很多有用的信息(我在学习时发现它非常宝贵)。
如果您的意思是 “如何使 Try
包含异常”,则使用如下所示的 Failure()
:
def calculateCartPrice(cart:Cart): Try[Price] = {
if(isCartValid(cart)) {
//Calculations happen here
Success(Price(totalPrice));
} else {
Failure(new InvalidCartException())
}
}
然后,给定一个 Try
你可以使用 getOrElse
来获取成功的值或抛出异常。
我是 Scala 的新手,现在正在尝试完成一个练习。我如何 return 一个 InvalidCartException 而函数 return 类型是 Try[Price]
//Success: return the calculated price
//Failure: InvalidCartException
def calculateCartPrice(cart:Cart): Try[Price] = {
if(isCartValid(cart)) {
//Calculations happen here
return Try(Price(totalPrice));
}
}
def isCartValid(cart: Cart): Boolean = {
//THIS WORKS FINE
}
感谢您的帮助
Try
会帮你捕获异常,所以把能抛出异常的代码放在那里。例如
def divideOneBy(x: Int): Try[Int] = Try { 1 / x}
divideOneBy(0) // Failure(java.lang.ArithmeticException: / by zero)
如果你有一个 Try
并且你想在你有一个 Failure
时抛出异常,那么你可以使用模式匹配来做到这一点:
val result = divideByOne(0)
result match {
case Failure(exception) => throw exception
case Success(_) => // What happens here?
}
The Neophyte's Guide to Scala 对刚接触 Scala 的人有很多有用的信息(我在学习时发现它非常宝贵)。
如果您的意思是 “如何使 Try
包含异常”,则使用如下所示的 Failure()
:
def calculateCartPrice(cart:Cart): Try[Price] = {
if(isCartValid(cart)) {
//Calculations happen here
Success(Price(totalPrice));
} else {
Failure(new InvalidCartException())
}
}
然后,给定一个 Try
你可以使用 getOrElse
来获取成功的值或抛出异常。