如何从特征的上下文访问案例类的参数

问题描述

我有一个特征,说:

sealed trait foo

还有一个扩展特性的案例类:

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大写;类和特性名称应始终用Scala代码大写,至少在您希望其他人(例如,在Stack Overflow上帮助您的人)能够阅读代码而不会感到困惑的情况下。