Wie Sie vielleicht wissen, hat Ruby einen Shorthand-Operator &
, mit dem wir einfach eine Symbol
in eine Proc
konvertieren können. Beispiel:Ruby unary operator `&` nur gültig für Methodenargumente
%w(a b c).map(&:upcase) #=> ["A", "B", "C"]
wäre gleichbedeutend mit:
%w(a b c).map { |c| c.upcase } #=> ["A", "B", "C"]
Und die Erklärung ist, dass &:upcase
to_proc
auf :upcase
ruft ein Proc
Objekt zu erstellen.
Also, das erklärt ziemlich viel, was der Operator tut, wenn es als letztes Argument einer Methode verwendet wird.
Allerdings sieht aus wie es nicht möglich ist, außerhalb der params eines Methodenaufruf den Bediener überall zu verwenden:
:upcase.to_proc => #<Proc:0x007febbc85ab38(&:upcase)>
&:upcase => SyntaxError: syntax error, unexpected &
Das wäre schön gewesen, wie diese zu nutzen:
case number
when &:even?
# ...
when &:prime?
# ...
end
Dies funktioniert obwohl:
case number
when :even?.to_proc
# ...
when :prime?.to_proc
# ...
end
kurz gesagt, die unären Operator &
kann auf B. in arr.map(&:upcase)
verwendet werden. Was ist der Grund dafür?
Mögliche Duplikate von [was ist die Funktionalität von "&:" Operator in Ruby?] (Http://stackoverflow.com/questions/9429819/what-is-the-funktionality-of-operator-in-ruby) –
Was Sie als Methodenargument denken, ist in der Tat ein Blockparameter der Methode - 'Symbol # to_proc' wird aufgerufen, wenn' & 'on symbol verwendet wird, und der resultierende Prozess wird als Blockparameter verwendet –
Dies ist kein Duplikat dieser Frage. Ich frage nicht, was die Funktionalität des Operators ist, die Frage selbst erklärt das grob. Ich bin interessiert zu wissen, warum dies nur in einem bestimmten Kontext (d. H. Methodenargumente) verfügbar ist. – xuuso