簡體   English   中英

(Scala)錯誤處理

[英](Scala) error handling

我目前正在做一個返回對象的函數。 但是,如果我在輸入中發現無效的東西,我想返回一些東西來指示該問題。 我只是無法解決這個問題。在這里處理錯誤的正確方法是什么? 使用選項? 但是返回None不會指定任何特定問題。 我有什么問題嗎?

case class myClass(value: Int)
def myFunction(input: Int) : myClass
{
  //return myClass if succeded
  //else return some error - what do I return here? 
}


//I've read that to handle some error scenarios you should do something like this:
sealed trait SomeError
object SomeError{
  case object UnknownValue extends SomeError
  case object SomeOtherError extends SomeError
  case object OutOfBounds extends SomeError
}
//But how do I return myClass and this at the same time in case of an error?

非常感謝!! ^^

是的, Option無法為您提供有關錯誤的詳細信息。 為此,您可以使用更靈活的Either Either都由LeftRight擴展。 成功則返回Right ,失敗則返回Left (按照慣例)。

例如

sealed trait MyTrait
case class MyClass(value: Int) extends MyTrait

def myFunction(input: Int): Either[String, MyTrait] = {
  if (input >= 0) Right(MyClass(input)) else Left("input was negative")
}

或使用SomeError

def myFunction(input: Int): Either[SomeError, MyTrait] = {
  if (input >= 0) Right(MyClass(input)) else Left(OutOfBounds)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM