2017-02-21 34 views
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 

Как мы могли бы сделать что-то подобное в Scala, используя trait и case class и/или case object?

начало:

trait ShoppingCart 
case object EmptyCart extends ShoppingCart 
case object ActiveCart extends ShoppingCart 
case object PaidCart extends ShoppingCart 

Но как сделать отношения с типами держателей данных?

ответ

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 

или (если вы хотите сохранить эти типы держателя данных, которые я бы, вероятно, не делать, если они не являются очень сложными)

sealed trait ShoppingCart 
case object EmptyCart extends ShoppingCart 
case class ActiveCart(unpaidItems: ActiveCartData) extends ShoppingCart 
case class PaidCart(paidItems: PaidCartData) extends ShoppingCart 
+0

Да, я Ожидал 'случай класс '. Я просто хотел убедиться, что не было ничего подобного псевдониму типа (исключая ключевое слово «тип» Scala). Благодаря! – boechat107