如何从特征上下文访问 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
请注意,我在所有地方都将 Foo
和 Bar
大写; class 特征名称在 Scala 代码中应始终大写,至少如果您希望其他人(例如,在 Stack Overflow 上帮助您的人)能够阅读代码而不会感到困惑。
我有一个特质,说:
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
请注意,我在所有地方都将 Foo
和 Bar
大写; class 特征名称在 Scala 代码中应始终大写,至少如果您希望其他人(例如,在 Stack Overflow 上帮助您的人)能够阅读代码而不会感到困惑。