Scala variadic Funktionen und Seq

8

Soweit ich weiß, werden Eigenschaften wie List oder Seq in der Scala-Standardbibliothek implementiert, anstatt Teil der Sprache selbst zu sein.

Es gibt jedoch eine Sache, die ich nicht verstehe: Man hat eine Syntax für variadische Funktionen, die aussieht wie

%Vor%

Intern hat man Zugriff auf args und es wird Seq .

Es ist mir nicht klar, ob:

  • Seq wird als eine spezielle Datenstruktur betrachtet, die ausreicht, um als Teil der Sprache zu erscheinen, oder
  • Die * -Notation ist hier ein spezieller Fall einer allgemeineren Syntax, die es vermeidet, Verweise auf konkrete Datenstrukturen zu verwenden.

Weiß jemand, welches die richtige Interpretation ist?

    
Andrea 13.08.2012, 09:51
quelle

2 Antworten

12

Es ist in der Tat eine gewisse Unschärfe zwischen Sprache und Bibliothek. Die Scala Language Specification v2.9 gibt in §4.6.2 Wiederholte Parameter :

an
  

Der letzte Wertparameter eines Parameterabschnitts kann mit "*" versehen sein, z. (..., x: T *). Der Typ eines solchen wiederholten Parameters innerhalb der Methode ist dann der Sequenztyp scala.Seq[ T ] .

Wenn Sie also wiederholte Argumente verwenden, wird angenommen, dass scala.Seq zur Laufzeit verfügbar ist (was der Fall sein sollte, da es Teil der Standardbibliothek ist).

    
0__ 13.08.2012, 10:02
quelle
1

Ich denke, es ist der erste. Es gibt ein paar Arten, die die Sprache verlangt, obwohl sie nicht wirklich Teil der Sprache sind. Mit Seq hast du eins gefunden.

    
Jens Schauder 13.08.2012 09:56
quelle