1

いくつかの封印されたクラスがあるとしましょう

sealed abstract class SomeEnumThing {
    type RenderedType
}
object Type1 extends SomeEnumThing {
    type RenderedType = String
}
object Type2 extends SomeEnumThing  {
     type RenderedType = Array[Byte]
}

そして、渡されたパラメーターで定義された抽象型に基づいてメソッドを返す必要があります。

def render(something : SomeEnumThing) : something.RenderedType = { .... }

これの正しい構文は何ですか。これは可能ですか? 2.10 メソッドに依存する型と関係があると思いました。

編集:更新された例

sealed abstract class SomeThing {
    type RenderedType
}
object Type1 extends SomeThing {
    type RenderedType = String
}
object Type2 extends SomeThing  {
     type RenderedType = Long
}

def render(something : SomeThing) : something.RenderedType = 
  something match {
    case Type1 => "test"
    case Type2 => 0l
}
4

1 に答える 1

0

構造的に、あなたの例にあるものは正しいようですが、問題は、それを返すためにそれらの省略記号の中で何をするかですsomething.RenderedType。すべてがコンパイルされる (そしてコンパイルされる) ことを確認するために、簡単な impl を一緒に投げましたが、先に述べたように、要約すると、そのレンダー関数内で何が起こっているかということになります。これが私のコードです:

object RenderedTypeTest {

  def render(something : SomeEnumThing) : something.RenderedType = {
    something.renderType
  }
}

sealed abstract class SomeEnumThing {
    type RenderedType
    def renderType:RenderedType
}
object Type1 extends SomeEnumThing {
    type RenderedType = String
    def renderType = "hello"
}
object Type2 extends SomeEnumThing  {
     type RenderedType = Array[Byte]
     def renderType = Array()
}
于 2013-04-24T18:41:33.953 に答える