Alle Originalinhalte werden auf Ukrainisch erstellt. Noch nicht alle Inhalte wurden übersetzt. Einige Beiträge sind möglicherweise nur auf Ukrainisch verfügbar.Mehr erfahren

Wie funktioniert &:to_s in Ruby und was ist Symbol#to_proc

InhaltsverzeichnisKlicke auf den Link, um zur gewünschten Stelle zu navigieren
Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
In Ruby gibt es oft eine verkürzte Schreibweise für Iterationen:
[1, 2, 3].map(&:to_s)
Das ist dasselbe wie:
[1, 2, 3].map { |n| n.to_s }
Aber wie funktioniert die Konstruktion &:to_s genau?

Symbol#to_proc

Die Schlüsselidee ist, dass Ruby es ermöglicht, Symbole mit der Methode to_proc in Blöcke zu konvertieren.
  • Das Symbol :to_s repräsentiert den Namen der Methode.
  • Die Methode to_proc verwandelt ein Symbol in einen Block, der die entsprechende Methode auf jedem Element der Sammlung aufruft.
  • Der Operator & teilt Ruby mit, dass dieser Block an die Methode (map, each usw.) übergeben werden soll.
Man kann das so sehen:
s = :to_s
p = s.to_proc
[1, 2, 3].map(&p)  # => ["1", "2", "3"]
Das heißt &:to_s ist eine verkürzte Schreibweise für &(:to_s.to_proc)
Wenn man es einfach sagt:
Wenn wir &:to_s schreiben, nimmt es jedes Element des Arrays und ruft darauf die Methode to_s auf.
Das heißt, diese Schreibweise:
[1, 2, 3].map(&:to_s)
bedeutet dasselbe wie:
[1, 2, 3].map { |n| n.to_s }
&:to_s ist einfach eine kurze Möglichkeit zu sagen "rufe die Methode to_s auf jedem Element auf". Ruby "entfaltet" dieses Symbol selbst in einen normalen Block.

Beispiele

1. Umwandlung von Zahlen in Strings
numbers = [1, 2, 3]
strings = numbers.map(&:to_s)
# => ["1", "2", "3"]
2. Aufruf anderer Methoden
words = ["hello", "world"]
capitalized = words.map(&:upcase)
# => ["HELLO", "WORLD"]
3. Aufruf eigener Methoden des Objekts
class Person
  attr_reader :name
  def initialize(name)
    @name = name
  end
end

people = [Person.new("Alice"), Person.new("Bob")]
names = people.map(&:name)
# => ["Alice", "Bob"]
Wie KI gerne schreibt - Fazit:
  • &:method_name ist eine verkürzte Schreibweise für &(:method_name.to_proc).
  • Ruby wandelt ein Symbol in einen Block um, indem es Symbol#to_proc verwendet, der die Methode auf jedem Element der Sammlung aufruft.
  • Das macht den Code kürzer und lesbarer.
Die Konstruktion &:to_s oder &:name ist sehr praktisch für Sammlungen, wenn man eine Methode auf allen Elementen aufrufen möchte.

Dieser Beitrag hat noch keine Ergänzungen vom Autor.

Wie Arrays in Ruby funktionieren: praktische Beispiele für each, map, select, inject, reduce, filter_map
28. Okt, 10:38 Uhr

Wie Arrays in Ruby funktionieren: praktische Beispiele für each, map, select, inject, reduce, filter_map

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Wie self, protected und private funktioniert (Ruby)
28. Okt, 13:52 Uhr

Wie self, protected und private funktioniert (Ruby)

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Ganzzahlige Division in Ruby: Warum 6 / 4 gleich 1 ist
28. Okt, 14:10 Uhr

Ganzzahlige Division in Ruby: Warum 6 / 4 gleich 1 ist

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Was sind Proc und Lambda in Ruby?
28. Okt, 15:57 Uhr

Was sind Proc und Lambda in Ruby?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Was passiert, wenn man [1, 2, 3].map(&Person) aufruft?
29. Okt, 17:54 Uhr

Was passiert, wenn man [1, 2, 3].map(&Person) aufruft?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Singleton-Klasse (Eigenklasse) in Ruby: was ist das und wozu wird sie benötigt
29. Okt, 18:29 Uhr

Singleton-Klasse (Eigenklasse) in Ruby: was ist das und wozu wird sie benötigt

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
==, gleich?, eql?, === in Ruby: was sie überprüfen und wann man sie verwenden sollte
29. Okt, 20:47 Uhr

==, gleich?, eql?, === in Ruby: was sie überprüfen und wann man sie verwenden sollte

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Include, Extend, Prepend in Ruby: wie sie funktionieren und wo der Unterschied liegt
29. Okt, 21:20 Uhr

Include, Extend, Prepend in Ruby: wie sie funktionieren und wo der Unterschied liegt

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
module_function in Ruby: wenn die Methoden eines Moduls sowohl als Modulmethoden als auch als Funktionen verfügbar sind
29. Okt, 21:53 Uhr

module_function in Ruby: wenn die Methoden eines Moduls sowohl als Modulmethoden als auch als Funktionen verfügbar sind

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska