8

Hasta donde yo sé, los rasgos como List o Seq se implementan en la biblioteca estándar de Scala en lugar de ser parte del lenguaje en sí.Funciones variadas de Scala y Seq

hay una cosa que no entiendo, sin embargo: uno tiene una sintaxis para funciones variadic que parece

def foo(args: String*) = ... 

Internamente se tiene acceso a args y habrá un Seq.

No es claro si:

  • Seq se considera una estructura de datos especial suficiente para aparecer como parte de la lengua, o
  • la * notación aquí es un caso particular de una más general sintaxis que logra evitar cualquier referencia a interfaces de estructuras de datos concretas.

¿Alguien sabe cuál es la interpretación correcta?

Respuesta

12

De hecho, es un poco 'borroso' entre el lenguaje y la biblioteca. Los estados v2.9 Scala lenguaje de especificación en §4.6.2 Parámetros repetidas:

El parámetro último valor de una sección parámetro puede ser el sufijo “*”, por ejemplo, (..., x: T *). El tipo de dicho parámetro repetido dentro del método es entonces el tipo de secuencia scala.Seq[T].

Así que cuando se utiliza argumentos repetidos, se supone que scala.Seq está disponible en tiempo de ejecución (que debería ser el caso, ya que es parte de la biblioteca estándar).

1

Creo que es el primero. Hay un par de tipos que el lenguaje exige que existan aunque en realidad no sean parte del lenguaje. Con Seq encontraste uno.