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