Question

As far as I know, traits like List or Seq are implemented in the Scala standard library instead of being part of the language itself.

There is one thing that I do not understand, though: one has a syntax for variadic functions that looks like

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

Internally one has access to args and it will be a Seq.

It is not clear to me whether:

  • Seq is considered a special data structure enough to appear as part of the language, or
  • the * notation here is a particular case of a more general syntax that manages to avoid any references to concrete data structures interfaces.

Does anyone know which one is the correct intepretation?

Was it helpful?

Solution

It is indeed somewhat a 'blur' between language and library. The Scala Language Specification v2.9 states in §4.6.2 Repeated Parameters:

The last value parameter of a parameter section may be suffixed by “*”, e.g. (..., x:T*). The type of such a repeated parameter inside the method is then the sequence type scala.Seq[T].

So when you use repeated arguments, it is assumed that scala.Seq is available at runtime (which should be the case, as it is part of the standard library).

OTHER TIPS

I think it is the first one. There are a couple of types that the language demands to exist although they aren't really part of the language. With Seq you found one.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top