Rubin nicht über Keyword-Argumentübergabe aktualisiert. (Noch nicht, jedenfalls, es ist eines der Dinge, die es in Ruby 2.0 machen könnten. Allerdings gibt es keine Garantien, und die Arbeit an Ruby 2.0 hat nicht einmal gestartet noch, so gibt es keine Angabe wann oder sogar wenn wir wird Schlüsselwortargumente in Ruby sehen.)
Was wirklich passiert passiert, ist dies: Sie übergeben den Ausdruck arg2 = 4
als einziges Argument in der Argumentliste. Ruby ist eine strikte Sprache mit pass-by-value. Dies bedeutet, dass alle Argumente vollständig ausgewertet werden, bevor sie an die Methode übergeben werden.In diesem Fall ist arg2 = 4
ein Zuweisungsausdruck (in Ruby, alles ist ein Ausdruck (d. H. Alles gibt einen Wert zurück), gibt es keine Anweisungen). Sie weisen der lokalen Variablen arg2
das sofortige Literal Fixnum
Wert 4
zu. Zuweisungsausdrücke immer geben den Wert ihrer rechten Seite zurück, in diesem Fall 4
.
Also, Sie übergeben den Wert 4
als einziges Argument in Ihre Methode, was bedeutet, dass es mit dem ersten Pflichtparameter gebunden wird, wenn es einen gibt (in diesem Fall gibt es nicht), ansonsten mit dem ersten optionaler Parameter (in diesem Fall arg1
).
Der üblicher Weg, mit Situationen wie diese zu behandeln ist ein Hash
stattdessen zu verwenden, wie folgt aus:
some_method({:arg2 => 4})
Da dieses Muster so oft verwendet wird, gibt spezielle syntaktische Unterstützung ist: Wenn das letzte Argument auf ein Verfahren ein Hash
ist, können Sie die geschweiften Klammern weglassen:
some_method(:arg2 => 4)
In Ruby 1.9 Form ist es eine andere syntaktische Bequemlichkeit: weil Hash
es sind so oft mit Symbol
Schlüssel verwendet wird, gibt es eine Alternative Hash
Literalsyntax dafür:
some_method({arg2: 4})
kombinieren sie beide, und Sie fast haben Keyword-Argumente:
some_method(arg2: 4)
(In der Tat, beide von Diese Verknüpfungen wurden speziell hinzugefügt, um einen einfachen Migrationspfad zu zukünftigen Versionen von Ruby mit Schlüsselwörtern zu ermöglichen.)
MacRuby unterstützt tatsächlich den Smalltalk-Stil Multipart Message Selectors für die Interoperabilität mit Objective-C. Beachten Sie jedoch, dass Smalltalk-Stil mehrteilige Nachrichtenselektoren nicht Schlüsselwort Argumente sind, sie verhalten sich sehr unterschiedlich. Diese Erweiterung ist natürlich spezifisch für MacRuby und nicht Teil der Ruby-Spezifikation und nicht tragbar für MRI-, YARV-, JRuby-, XRuby-, IronRuby-, MagLev-, Rubinius-, Tinyrb-, RubyGoLightly-, BlueRuby-, SmallRuby- oder andere Ruby-Implementierungen.
'arg2 = 4' in Ruby weist einer lokalen Variablen namens' arg2', unabhängig davon, wo Sie sie angeben, 4 auch unter den Funktionsaufrufargumenten 4 zu. –
Ja .. Ich erkannte, dass nach dem Versuch: P – Jose