Cómo acceder al parámetro de una clase de caso desde el contexto de un rasgo

Aug 21 2020

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

2 SethTisue Aug 21 2020 at 08:53

No sé si esto tiene sentido en el contexto de su programa, pero podría definir Foolo 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 Fooy en Bartodas 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.