【发布时间】:2012-08-31 22:02:08
【问题描述】:
下面的代码有效,但选项 b 上的模式匹配看起来并不优雅。 有没有办法在保持相同语义的同时避免它?
object A {
def apply(b: B): ValidationNEL[String, A] = ...
}
case class C(i: Int, a: Option[A])
object C {
def apply(i: Int, b: Option[B]): ValidationNEL[String, C] = b match {
case None => Success(C(i, None))
case Some(sb) => A(sb).map(bb => C(i, Some(bb)))
}
}
【问题讨论】:
-
“优雅”是主观的。如果您对模式匹配感到不舒服,请直说,但标记为“优雅”或不分散注意力。如果您只是在寻找表达相同结构的替代方法,请直说
-
@AndreasScheinert:在某种程度上,优雅是由社区定义的,在经验丰富的 Scala 开发人员中,
Option上的模式匹配肯定不受欢迎。 -
在这种特殊情况下,可能有大多数人有这种偏好。我仍然不喜欢将“优雅”一词与“风格”结合使用,但可能只有我一个人 ;)