Ruby Ampersand Doppelpunkt Verknüpfung [Duplizieren]

277

In Ruby weiß ich, wenn ich das tue:

%Vor%

Es ist dasselbe wie

%Vor%

Das heißt, &:foo erstellt den Block { |obj| obj.foo } , wandelt ihn in einen Proc um und übergibt ihn an jeden. Warum funktioniert das? Ist es nur ein spezieller Ruby-Fall oder gibt es einen Grund, warum das so funktioniert?

    
Allan Grant 25.12.2009, 11:35
quelle

2 Antworten

431

Ihre Frage ist sozusagen falsch. Was hier passiert ist nicht "kaufmännisches Und-Zeichen", sondern "kaufmännisches Und-Objekt". Der Doppelpunkt ist in diesem Fall für das Symbol. Also, es gibt & und es gibt :foo .

Das & ruft to_proc für das Objekt auf und übergibt es als Block an die Methode. In Rails wird to_proc auf Symbol implementiert, sodass diese beiden Aufrufe äquivalent sind:

%Vor%

Außerdem ist to_proc auf Symbol in Ruby 1.8.7 und 1.9 implementiert, also ist es tatsächlich ein "Ruby-Ding".

Also, um es zusammenzufassen: & ruft to_proc für das Objekt auf und übergibt es als Block an die Methode, und Ruby implementiert to_proc für Symbol .

    
August Lilleaas 25.12.2009, 12:46
quelle
69

Die Kombination aus kaufmännischem Und-Zeichen und Symbol ist nichts Besonderes. Hier ist ein Beispiel, dass (ab) die Regex verwendet:

%Vor%

Oder ganze Zahlen.

%Vor%

Wer braucht arr.map(&:fifth) wenn du arr.map &4 hast?

    
Michiel de Mare 26.02.2011 16:19
quelle

Tags und Links