Cómo acceder al parámetro de una clase de caso desde el contexto de un rasgo
Tengo un rasgo, digo:
sealed trait foo
Y una clase de caso que extiende el rasgo:
case class bar(data: List[String]) extends foo
Me gustaría escribir una función que acceda a los datos de la barra, pero se pasa como foo, digamos:
def doSomething(x: foo) = {does something with foo.data}
Y llamado así:
val aBar = bar(some list)
doSomething(aBar)
Pero no puedo acceder cuando la función doSomething espera un tipo foo. ¿Cómo puedo evitar esto para acceder a los valores de un tipo de barra?
Respuestas
No sé si esto tiene sentido en el contexto de su programa, pero podría definir Foo
lo siguiente:
trait Foo {
def data: List[String]
}
Si eso no tiene sentido, entonces quizás debería hacer coincidir el patrón:
def doSomething(x: Foo) =
x match {
case bar: Bar => ... // or `case Bar(data)`, as Luis suggests
Tenga en cuenta que he escrito en mayúsculas Foo
y en Bar
todas partes; Los nombres de clases y rasgos siempre deben estar en mayúscula en el código de Scala, al menos si desea que alguien más (por ejemplo, las personas que lo ayudan en Stack Overflow) puedan leer el código sin confundirse.