8

Per quanto ne so, tratti come List o Seq sono implementati nella libreria standard di Scala anziché essere parte della lingua stessa.Funzioni variadic Scala e Seq

C'è una cosa che non capisco, però: uno ha una sintassi per le funzioni variadic che sembra

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

Internamente si ha accesso ad args e sarà un Seq.

Non è chiaro se:

  • Seq è considerato una struttura di dati speciale sufficiente per apparire come parte del linguaggio, o
  • il * notazione: ecco un caso particolare di un più generale sintassi che riesce a evitare riferimenti a interfacce di strutture dati concrete.

Qualcuno sa qual è l'interpretazione corretta?

risposta

12

In effetti, si tratta di un po 'di "sfocatura" tra linguaggio e libreria. I v2.9 stati Scala linguaggio di specifica di §4.6.2 Parametri ripetute:

L'ultimo parametro il valore di una sezione parametro può essere suffisso “*”, ad esempio (..., x: T *). Il tipo di tale parametro ripetuto all'interno del metodo è quindi il tipo di sequenza scala.Seq[T].

Così, quando si utilizza argomenti ripetuti, si presume che scala.Seq è disponibile in fase di esecuzione (che dovrebbe essere il caso, in quanto fa parte della libreria standard).

1

Penso che sia il primo. Ci sono un paio di tipi che la lingua richiede di esistere anche se non fanno realmente parte della lingua. Con Seq ne hai trovato uno.