如何从特征上下文访问 case class' 参数

How to access a case class' parameter from context of a trait

我有一个特质,说:

sealed trait foo

还有一个案例 class 扩展了特征:

case class bar(data: List[String]) extends foo

我想写一个访问 bar 数据的函数,但它作为 foo 传递,比如:

def doSomething(x: foo) = {does something with foo.data}

然后这样调用:

val aBar = bar(some list)
doSomething(aBar)

但是当函数 doSomething 需要类型 foo 时我无法访问。我怎样才能绕过这个问题来访问条形图类型的值?

我不知道这在您的程序上下文中是否有意义,但您可以定义 Foo 如下:

trait Foo {
  def data: List[String]
}

如果这没有意义,那么也许您应该进行模式匹配:

def doSomething(x: Foo) =
  x match {
    case bar: Bar => ...    // or `case Bar(data)`, as Luis suggests

请注意,我在所有地方都将 FooBar 大写; class 特征名称在 Scala 代码中应始终大写,至少如果您希望其他人(例如,在 Stack Overflow 上帮助您的人)能够阅读代码而不会感到困惑。