2013-02-27 18 views
3

我是新來的斯卡拉,現在我正在創建我的第一個枚舉(案例類覆蓋toString)。如何在Scala中構建適當的名稱空間?

package views.helper.button 

abstract sealed class Size(identifier: Option[String]) 
{ 
    def this(identifier: String) = this(Some(identifier)) 

    override def toString: String = identifier match 
    { 
     case Some(identifier) => "btn-" + identifier 
     case _ => "" 
    } 

    case object Mini extends Size("mini") 
    case object Small extends Size("small") 
    case object Default extends Size(None) 
    case object Large extends Size("normal") 
} 

來自Java背景這是我的第一次嘗試。訪問像button.Size.Mini這樣的大小寫對象對我來說似乎很自然。但看起來我無法訪問該類的內部對象。將它們放置在Size類下面可以正常工作,但會導致名稱空間混亂。

這是爲什麼?你如何模擬這種行爲?這可以通過一個對象延伸Enumeration(我認爲toString會成爲一個問題..)更優雅。

+0

我見過'object'被用於命名空間。你意識到'object'是一個創建了單例實例的類,rt ?. – anoopelias 2013-02-27 15:31:26

回答

4

如果你想使用案例類,你需要把案件物體大小(相當於靜態知名度)的同伴對象

package views.helper.button 

abstract sealed class Size(identifier: Option[String]) 
{ 
    def this(identifier: String) = this(Some(identifier)) 

    override def toString: String = identifier match 
    { 
     case Some(identifier) => "btn-" + identifier 
     case _ => "" 
    } 
} 

object Size { 
    case object Mini extends Size("mini") 
    case object Small extends Size("small") 
    case object Default extends Size(None) 
    case object Large extends Size("normal") 
} 
相關問題