3

私は Scala を初めて使用し、現在、最初の列挙型 (オーバーライドするケース クラスを使用toString) を作成しています。

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

4

1 に答える 1

5

ケースクラスを使いたい場合は、ケースオブジェクトをサイズのコンパニオンオブジェクトに入れる必要があります(静的可視性に相当)

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" )
}
于 2013-02-27T15:32:58.717 に答える