【发布时间】:2012-07-15 00:25:21
【问题描述】:
关于潜在的运行时故障,例如数据库查询,似乎必须使用某种形式的Either[String, Option[T]] 才能准确捕获以下结果:
- 一些(找到记录)
- 无(未找到记录)
- SQL 异常
选项根本没有足够的选项。
我想我需要深入研究 scalaz,但现在它是直接的,除非我在上面遗漏了一些东西。
我的 DAO 实现让自己陷入了困境,只使用 Either 进行写入操作,但现在我看到一些 Either 写入依赖于 Option 读取(例如,检查新用户注册时是否存在电子邮件),这非常糟糕赌一把。
在我全力以赴之前,有没有人有替代解决方案来处理成功/失败/异常的运行时三重奏?
【问题讨论】:
-
既然记录是可能的,
Either[String, List[T]]会更合适,不是吗? -
取决于,我需要处理 Option[T] 和 List[T] 或 Option[List[T]]。现在我对写入操作执行 Either[String, SuccessType],除非我听到其他情况,否则对读取操作执行相同操作
-
@virtualeyes 不,你真的不需要处理所有这些。你说要么有一些记录,没有记录,要么有例外,对吗?那么 Some records 可以是一个非空的记录列表,No records 可以是一个空的记录列表,Exception 和往常一样是两者的左边部分。
-
@DanBurton 是的,这就是我所说的 x,y,z 的意思, Either 或 Option 处理程序将查询结果转换为预期类型;即,如果我说 option[List[Foo]](query) 或 option[Foo](query),我将相应地返回包含 Some 或 None 结果的 Option。切换到 Either-only 查询结果当然需要更多的工作(必须通过结果折叠/映射或 .isRight/.right,或 for{ x
标签: scala error-handling either scala-option