Я лично не знаком со Scalax или Bistate
в частности, но просто глядя на скаладоки, это выглядит как дизъюнкция влево-вправо. В основной библиотеке Scala очень похожа монада (Either
), поэтому я удивлен, что они не просто использовали стандартную.
По сути, Bistate
и Either
немного похожи на Option
, за исключением того, что их "None
-эквивалент" может содержать значение. Например, если бы я писал код, используя Either
, я мог бы сделать что-то вроде этого:
def div(a: Int, b: Int) = if (b != 0) Left(a / b) else Right("Divide by zero")
div(4, 2) match {
case Left(x) => println("Result: " + x)
case Right(e) => Println("Error: " + e)
}
Это напечатало бы "Result: 2
". В этом случае мы используем Either
для имитации исключения. Мы возвращаем экземпляр Left
, который содержит требуемое значение, если только это значение не может быть вычислено по какой-либо причине, и в этом случае мы возвращаем сообщение об ошибке, заключенное в экземпляр Right
.