Reputation: 20493
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*
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?
Upvotes: 14
Views: 4486
Reputation: 67290
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).
Upvotes: 15
Reputation: 81930
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.
Upvotes: 2