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中类似的东西使用trait和case 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)
但是如何与数据持有者类型建立关系呢?
如果我理解正确,你正在寻找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)
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |