是否可以使用@语法简化此scala match语句?

时间:2019-06-25 21:07:55

标签: scala

是否可以使用<RestoreProjectStyle>PackageReference</RestoreProjectStyle> 语法简化以下match语句?

@

其中foo match { case f: Foo => y(f) case f if forceY => y(f) case _ => x } forceY

我尝试了以下操作,但遇到了编译错误,并且编译器解释的语法确实有问题。也许这无法表达?

boolean

1 个答案:

答案 0 :(得分:6)

foo match {
  case f if f.isInstanceOf[Foo] || forceY => y(f)
  case _ => x
}

您不能专门使用@,因为语法f: Foo只能出现在case的匹配部分中,而不能出现在if之后的条件中。

原始版本也不错。如果您实际在右侧拥有的内容比仅y长,则可以显式定义y并保留这三种情况,因为它们看起来不错。