首页 > 解决方案 > Scala 是否支持 OR 组合?

问题描述

这个问题可能是一个愚蠢的问题,任何搜索引擎都应该给我一个快速的答案。但是我没有找到任何东西,所以我可能会使用错误的术语。

如果F#|可以使用符号进行异(或)组合:

type LeftOrRightOrNone = 
   | Left of string
   | Right of string
   | None

这意味着 aLeftOrRightOrNone只能是LeftOR RightOR类型None

我们可以对密封特征有相同的约束:

sealed trait LeftOrRightOrNone
case class Left(..) extends LeftOrRightOrNone
case class Right(..) extends LeftOrRightOrNone
case object None extends LeftOrRightOrNone

但我想知道在 Scala 中是否有更简单的方法来声明此类类型?

谢谢

标签: scalatypesfunctional-programmingcompositionunion-types

解决方案


在 Scala 2 中,您需要使用您描述的密封特征和案例类来编写它。Scala 3 对此有更好的语法:

enum Either[+A, +B]:
   case Left(a: A)
   case Right (b: B)

https://dotty.epfl.ch/docs/reference/enums/adts.html


推荐阅读