Scala 为返回错误映射的函数选择适当的返回类型

Scala 为返回错误映射的函数选择适当的返回类型,scala,Scala,我有一个函数,它要么返回Map[String,Seq[String]]作为键的错误序列(如果有错误),要么返回success(可能是,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

我有一个函数,它要么返回
Map[String,Seq[String]]
作为键的错误序列(如果错误),要么返回success(可能是,
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
,这没关系,但它似乎是多余的。第三种情况也是如此,但还有一个问题-我将返回什么作为
正确的


您认为呢?

第一个选项的唯一问题是很容易忘记检查返回结果的
isEmpty
。如果大多数客户机自然会使用空映射做正确的事情(例如,因为他们只是对它进行迭代,或者得到大量错误),那么这是最好的。如果您将方法命名为
getErrors
(正如@senia所说),那么选项2是可以接受的,选项3也是可以接受的(使用
或者[Map[String,Seq[String]],Unit]
)。

对我来说,它看起来主要是基于观点的问题。因此,我的观点是:它应该被命名为
getErrors
(或类似名称),以强调结果是一个结果类型为
Option[…]
的错误集合,或者您应该使用
scalaz.Validation
作为结果类型:
Validation[Map[String,Seq[String]],Unit]
ValidationNEL[(String,Seq[String]),Unit]
@senia在客户端检查map.isEmpty不是更好吗?@senia您认为返回选项[map[String,Seq[String]]明智吗?为什么不直接映射[String,Seq[String]]?我想这里最好的解决方案是
Validation
def validatefo(a:Foo):ValidationNEL[ErrorType,Foo]
。使用custom
ErrorType
@senia,但我没有使用scalaz。