タイプTまたはタイプエラーのいずれかを返す一種のオプションタイプをアーカイブするにはどうすればよいですか?
いくつかのWebリクエストを実行していますが、応答が「ok」でオブジェクトが含まれているか、呼び出しでエラーが返されます。その場合、エラーの理由をErrorオブジェクトに提供します。
だから次のようなもの:
def myRequest() : Result[MyObject] {
if (thereWasAnError) Error(reason) else MyObject
}
タイプTまたはタイプエラーのいずれかを返す一種のオプションタイプをアーカイブするにはどうすればよいですか?
いくつかのWebリクエストを実行していますが、応答が「ok」でオブジェクトが含まれているか、呼び出しでエラーが返されます。その場合、エラーの理由をErrorオブジェクトに提供します。
だから次のようなもの:
def myRequest() : Result[MyObject] {
if (thereWasAnError) Error(reason) else MyObject
}
scala.EitherEitherタイプはまさにあなたが望むものでなければなりません:
def myRequest() : Either[String, MyObject] =
if (thereWasAnError)
Left("Some error message")
else
Right(new MyObject)
Eitherに似てOptionいますが、2 つの可能な値のうちの 1 つを保持できます: leftまたはright。慣例により、右は OK で、左はエラーです。
派手なパターン マッチングを実行できるようになりました。
myRequest() match {
case Right(myObject) =>
//...
case Left(errorMsg) =>
//...
}
scala.Option.toRight()同様に、それを使用Optionして翻訳することができますEither。通常は*right* values is used for success and left for failure, I suggest usingtoRight() rather thantoLeft()` から:
def myRequest() : Option[MyObject] =
if (thereWasAnError)
None
else
Some(new MyObject)
val result: Either[String, MyObject] = myRequest() toRight "Some error message"
ただし、この単純な例ではEither、結果として直接返す方が簡単に見えます。myRequest()