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 回答