Как я могу (лучше всего) преобразовать опцию в пробную версию?

Как я могу (лучше всего) преобразовать Option, возвращенный вызовом метода, в Try (по предпочтению, хотя это либо скаляр, либо скаляр)\/ или даже валидация может быть в порядке), включая указание значения сбоя, если это уместно?

Например, у меня есть следующий код, который кажется глупым, но, по крайней мере, выполняет (большую часть) работу:

import scala.util._

case class ARef(value: String)
case class BRef(value: String)
case class A(ref: ARef, bRef: BRef)
class MismatchException(msg: String) extends RuntimeException(msg)

trait MyTry {

  // Given:
  val validBRefs: List[BRef]

  // Want to go from an Option[A] (obtained, eg., via a function call passing a provided ARef)
  // to a Try[BRef], where the b-ref needs to be checked against the above list of BRefs or fail:

  def getValidBRefForReferencedA(aRef: ARef): Try[BRef] = {

    val abRef = for {
      a  Failure(new MismatchException("No B found matching A's B-ref"))
    }
  }
}

Такое ощущение, что должен быть способ, чтобы финальное совпадение трансформировалось в карту или flatMap или аналогичную конструкцию и было включено в предыдущее для понимания.

Кроме того, я предпочел бы иметь возможность указать другое сообщение об ошибке, если вызов для возврата Option [A] из ARef не удался (возвращен None) по сравнению с ошибкой проверки BRef (мне важно знать только одну причину сбоя, так что проверка скаляза нене чувствую, что идеально подходит).

Это подходящее место для использования монадного трансформатора? Если да, то предоставляет ли скалаз подходящий вариант или кто-то может привести пример того, как он будет выглядеть?

Ответы на вопрос(6)

Ваш ответ на вопрос