Scala是否具有F#的"类型"?

boe*_*107 2 f# scala

F#中的类型声明示例:

type ActiveCartData = { UnpaidItems: string list }
type PaidCartData = { PaidItems: string list; Payment: float }

type ShoppingCart = 
    | EmptyCart  // no data
    | ActiveCart of ActiveCartData
    | PaidCart of PaidCartData
Run Code Online (Sandbox Code Playgroud)

我们如何能做到在Scala中类似的东西使用traitcase class和/或case object

一个开始:

trait ShoppingCart
case object EmptyCart extends ShoppingCart
case object ActiveCart extends ShoppingCart
case object PaidCart extends ShoppingCart
Run Code Online (Sandbox Code Playgroud)

但是如何与数据持有者类型建立关系呢?

Thi*_*ilo 7

如果我理解正确,你正在寻找case classes而不是case objects.他们可以包装数据:

sealed trait ShoppingCart
case object EmptyCart extends ShoppingCart
case class ActiveCart(unpaidItems: Seq[String]) extends ShoppingCart
case class PaidCart(paidItems: Seq[String], payment: Float) extends ShoppingCart
Run Code Online (Sandbox Code Playgroud)

或者(如果你想保留这些持有者数据类型,除非它们非常复杂,否则我可能不会这样做)

sealed trait ShoppingCart
case object EmptyCart extends ShoppingCart
case class ActiveCart(unpaidItems: ActiveCartData) extends ShoppingCart
case class PaidCart(paidItems: PaidCartData) extends ShoppingCart
Run Code Online (Sandbox Code Playgroud)