2013-07-09 44 views
2

延伸它的同伴案件類作爲一個例子,在Play框架,一個目的Scala中

你看的情況下類JsPath和它的同伴對象中定義的包play.api.libs.json內部如下

case class JsPath(path: List[PathNode] = immutable.this.Nil) extends Product with Serializable 

object JsPath extends JsPath 

一般來說,當您使用伴隨案例類擴展對象時,您會獲得什麼好處?

+0

因密封抽象類GetCurrentCount而到達此處; case對象GetCurrentCount擴展GetCurrentCount;在akka容錯示例中:http://doc.akka.io/docs/akka/snapshot/scala/fault-tolerance-sample.html#full-source-code-of-the-fault-tolerance-sample –

回答

1

除了一些混淆之外,沒有任何好處,您可以使用JsPath對象作爲空JsPath。如果你需要一個空的對象,如果你給它一個單獨的域名(相當於ListNil)很可能是更具可讀性:

object EmptyJsPath extends JsPath(Nil) 

,或者你的伴侶定義empty方法(像其他大多數集合類):

object JsPath { 
    def empty = ... 
} 
+0

但是總體上有什麼好處? – platypus

+0

@platypus你的意思是說,當你定義一個案例類時,像「apply」和「unapply」這樣的「自動」發生在你的同伴身上? – gzm0

+0

我的意思是,如果你在一個對象擴展其伴侶案例類時看到這個模式(不是在特定於Play的上下文中),爲什麼人們這樣做?是否有一些衆所周知的好處? – platypus

相關問題