Splat auf einen Hash

8
  • Ein Splat auf einen Hash konvertiert ihn in ein Array.

    [*{foo: :bar}] # => [[:foo, :bar]]

    Gibt es hier einen versteckten Mechanismus (wie zum Beispiel impliziten Klassenwurf) oder ist es ein eingebautes primitives Feature?

  • Neben einem Array sind nil und hash die einzigen Dinge, die mit dem splat-Operator unter Ruby 1.9 verschwinden / sich ändern?

sawa 13.01.2013, 12:35
quelle

1 Antwort

12

Ein Splat versucht eine explizite Umwandlung eines Objekts in ein Array.

Dafür sendet es to_a und erwartet als Ergebnis eine Array .

%Vor%

Wenn das Objekt nicht auf to_a reagiert, gibt es keinen Effekt, z. [*42] == [42]

Viele eingebaute Klassen implementieren to_a . Insbesondere:

  • (weil sie Enumerable enthalten)
    • Array
    • Hash
    • Range
    • IO und File
    • Enumerator
    • Enumerator::Lazy (Ruby 2.0)
    • Set und SortedSet
  • (zusätzliche Klassen)
    • NilClass
    • MatchData
    • OpenStruct
    • Struct
    • Time
    • Matrix und Vector

Alle diese können so gespritzt werden:

%Vor%     
Marc-André Lafortune 14.01.2013, 01:45
quelle

Tags und Links