Wenn Ruby ein &
vor einem Objekt trifft, es erwartet sie ein Proc
sein, so dass es to_proc
auf diesem Objekt nennen würde.
So zum Beispiel, wenn Sie hatte
proc_object = proc{puts 1}
Passing &proc_object
als Argument für eine Methode, die einen Block akzeptiert würde to_proc auf das Objekt aufrufen.
Dies ist der gleiche Fall mit einem Symbol :proc_object
, als ein Anruf an &:method_name
ist das gleiche wie :method_name.to_proc.call
tun.
In einem Enumerable werden dem Proc Objekte übergeben, deshalb können Sie ein Array-Objekt durchlaufen und jedes Element drucken, da jedes dieser Elemente während der Schleife zurückgegeben wird.
Für jedes Element in der Sammlung wird das proc auf sich als solche
[1,2,4,5].map(&:to_s) # => ['1', '2', '4', '5']
nennen diese grundsätzlich jedes Element des Arrays ein String-Objekt umgewandelt, weil jedes Element des Arrays zu meinem proc ergibt.
sollten Sie sehen die &: to_s innerhalb Elements Kontext zB ausgeführt 5.to_s
, da das Verfahren existiert bereits innerhalb Elements der Klasse usw.
Wenn Sie das Gleiche mit einem Verfahren zu erreichen versuchen, die nicht auf jedem definiert Element, erhalten Sie einen undefined_method Fehler.
In Ihrem Fall glaube ich nicht, dass es ein gutes Beispiel wäre, es sei denn, eine add_two Methode existierte.
Beispiele:
{dave: :fogo, stack: :overflow, day: :today}.map(&:first) # => would return :dave, :stack, :day because for each loop through the map, an array is yielded with the first element being the key and the second the value.
[1,2,3,5,10].map(&:even?) # => [false, true, false, false, true]
Das Array und Hash ist ähnlich wie Active ist, ist eine Sache zu wissen, dass die Methode Sie vorbei gefahren ist, innerhalb der Klasse des Elements definiert werden.
Ich hoffe, das macht Sinn.
Aus Ihrer Frage ist unklar, welche Verwendung von '&' Sie suchen. '&' wird als Set-Kreuzungsoperator auf Array (http://ruby-doc.org/core-2.0/Array.html#method-i-26) implementiert, ist aber auch ein Alias für 'to_proc' auf Symbol (http://ruby-doc.org/core-2.0.0/Symbol.html#method-i-to_proc) und wird oft verwendet, um kurze Collection-Iteratoren zu schreiben. – Jonah