2017-01-09 1 views
1

Ich lernte letzten Sommer groovy und entdeckte die Syntax für Konstruktoren, die Sie den Parameternamen mit einem Wert angeben und diesen Wert initialisieren können. Zum Beispiel:Woher stammt die Syntax paramname: value für die Übergabe von Parametern?

Team team = new Team(name: "Bengals") 

Am Ende des Jahres verbessern ich IntelliJ und diese Syntax begann in meinen Java-Funktionen mit überladenen Funktionen mit unterschiedlichen Parameterlisten auftauchen. (Dies ist nicht sehr gut umgesetzt. Es ist verwirrend, wenn ich versuche, die Werte zu ändern. Ich habe es herausgefunden, aber schlecht umgesetzt.)

team.chant = (msg: "Who dey?"); 

was interessant ist, weil ich Swift Lernen bin 3 und verwendet die gleiche Syntax.

Es scheint unwahrscheinlich, dass Swift 3 von Groovy beeinflusst wurde, also bin ich neugierig. Welche Sprache setzt diese Sprachen unter Druck, um die Syntax von parname: value zu unterstützen?

Es scheint mir, dass Swift auf etwas basiert, was ich über Smalltalk weiß. Unterstützt Smalltalk diese Parametersyntax?

+0

https://en.wikipedia.org/wiki/Named_parameter listet eine Reihe von Sprachen auf, die benannte Parameter unterstützen: Ada, C# 4.0+, Ceylon, ColdFusion Markup Language (CFML), Common Lisp, Fortran, IDL, Kotlin, Mathematica, Objective-C, PL/SQL, Python, Ruby, Scala, Smalltalk, Swift und Visual Basic. – eMBee

+0

Beispiele hier: http://rosettacode.org/wiki/Call_a_function und hier: http://rosettacode.org/wiki/Named_parameters – eMBee

+0

Interessant ... neu zu C# auch hinzugefügt. Konnte Ziel-C Fütterung schnell und C# beide sehen. Vielleicht ist das der Druck. – Thom

Antwort

2

Ich weiß nicht Swift noch Groovy, also kann ich nur für den Smalltalk-Teil antworten.

Smalltalk unterstützt diese Syntax nicht, hat jedoch Schlüsselwortmeldungen, die sehr ähnlich lesen.

Zum Beispiel

team := Team new name: 'Bengals'. 
team chant msg: 'who dey?' 

gilt in Smalltalk.

Es ist nicht so, dass die Namen von Parametern im Befehl sind, aber der Befehl selbst ist #name :, der dem Namen einer Instanzvariable entspricht, aber eine Methode ist, um seinen Wert zu setzen ... Also wie gesagt, Es liest das Gleiche, aber die Bedeutung ist sehr unterschiedlich.

Verwandte Themen