*
wird sowohl für einen Operator (42 * 42
) als auch für das Argument Entpacken (myfun *[42, 42]
) verwendet.
Wenn Sie das tun:
m.x *m.x
2/m.x *m.x
Rubin interpretiert dies als Argument ausgepackt haben, anstatt die *
Operator (dh Multiplikation.).
Falls Sie nicht mit ihm vertraut sind, Argument Auspacken (manchmal auch als „Klecks“ genannt, oder „splats“) bedeutet, dass Sie eine Funktion wie diese haben:
def myfun arg1, arg2; end
Und es nennen wie dies:
myfun(*['Hello', 'World'])
arg1
ist auf Hello
und arg2
ist auf World
.
Ich glaube, die Regeln zu bestimmen, welche zu benutzen ist:
- Raum vor, aber nicht nach einem
*
-> Argument Auspacken
- Beginn der Funktion Klammern -> Argument Auspacken
- Alles else -> Multiplikation (oder besser der Operator
*
, da Ruby den Operator überlädt).
Gut Richtlinien sind:
- die "optional" Funktion Klammern verwenden, wenn Sie Argument beabsichtigen Auspacken;
- Verwenden Sie Leerzeichen vor und nach
*
, wenn Sie den Operator *
beabsichtigen (Multiplikation).
Rubin warnt Sie eigentlich darüber, wenn Sie ruby -v
laufen:
test.rb|11 warning| `*' interpreted as argument prefix
test.rb|12 warning| `*' interpreted as argument prefix
War der Verdacht, dass es etwas damit zu tun hatte, aber die Fehlermeldungen waren nicht allzu hilfreich. +1 für Ruby -V. Sind die genauen Syntaxregeln dafür irgendwo dokumentiert? –
@TrygveFlathen Da ist der Ruby [Ruby Draft Specification hier] (http://www.ipa.go.jp/osc/english/ruby/ruby_draft_specification_agreement.html) (klicken Sie auf "Ich stimme zu" am unteren Rand), versuchte ich zu sehen es hat aber keine Zeit, um Standard-Spezifikation-Sprache zu entwirren ;-) – Carpetsmoker