如何(最好)将方法调用返回的选项转换为Try(优先级,尽管Either或scalaz \/甚至验证可能没问题),包括在适当的情况下指定Failure值?
例如,我有以下代码,感觉很笨,但至少做(大部分)工作:
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 { …Run Code Online (Sandbox Code Playgroud) 我正在尝试为以下情况编写"更好"(更惯用?)Scala代码:我有一组类,这些类将由属于并行参考案例类集的引用字段标识,如下所示:
abstract sealed class Ref(value: String)
case class ARef(value: String) extends Ref(value)
case class BRef(value: String) extends Ref(value)
case class CRef(value: String) extends Ref(value)
trait Referenced {
type refType <: Ref
val ref: refType
}
trait A extends Referenced { type refType = ARef }
trait B extends Referenced { type refType = BRef }
trait C extends Referenced { type refType = CRef }
Run Code Online (Sandbox Code Playgroud)
另一个类(可能会变成State monad的状态类型)将包含这些类型的列表,并提供一个函数来检索一个对象,给出它的引用.我希望这个返回值适当地输入,即给定
val aRef = ARef("my A ref")
Run Code Online (Sandbox Code Playgroud)
我希望能够打个电话:
val myA: Option[A] = context.get[A](aRef)
Run Code Online (Sandbox Code Playgroud)
并确保取回选项[A],而不仅仅是选项[参考].到目前为止,我实现这一目标的最佳尝试类似于以下内容: …