2013-02-27 1 views
3

Я новичок в Scala, и сейчас я создаю свое первое перечисление (с классами case для переопределения 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' - это класс с созданным экземпляром singleton, rt ?. – anoopelias

ответ

4

Если вы хотите использовать случай класс, вам нужно поместить объект случай в компаньон объекта Size (эквивалент статической видимости)

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") 
}