【发布时间】:2014-02-11 16:17:06
【问题描述】:
我有一个函数应该返回Map[String, Seq[String]] 作为键的错误序列(以防出现是错误)或返回成功(可能是Unit)。我想知道,它的最佳返回类型是什么?
def foo1(a: Int): Map[String, Seq[String]]
def foo2(a: Int): Option[Map[String, Seq[String]]]
def foo3(a: Int): Either[Map[String, Seq[String]], ???]
//def foo4(a: Int): something else?
如果是第一种情况,如果没有错误,它必须返回Map["", Seq()],而且在我看来,它看起来并不优雅。在第二种情况下,它将返回None,这没关系,但它似乎是多余的。第三种情况也是如此,但还有一个问题 - 我将返回 Right 什么?
你怎么看?
【问题讨论】:
-
在我看来,这主要是基于意见的问题。所以这是我的意见:它应该命名为
getErrors(或类似名称)以强调结果是结果类型为Option[...]的错误的集合,或者你应该使用scalaz.Validation作为结果类型:Validation[Map[String, Seq[String]], Unit]或@987654331 @. -
@senia 在客户端检查 map.isEmpty 不是更好吗?
-
@senia 你认为 return Option[Map[String, Seq[String]]] 是否合理?为什么不只是 Map[String, Seq[String]]?
-
我想这里最好的解决方案是
Validation:def validateFoo(a: Foo): ValidationNEL[ErrorType, Foo]。使用自定义ErrorType。 -
@senia,但我没有使用 scalaz。
标签: scala