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?
Ein Splat versucht eine explizite Umwandlung eines Objekts in ein Array.
Dafür sendet es to_a
und erwartet als Ergebnis eine Array
.
Wenn das Objekt nicht auf to_a
reagiert, gibt es keinen Effekt, z. [*42] == [42]
Viele eingebaute Klassen implementieren to_a
. Insbesondere:
Enumerable
enthalten)
Array
Hash
Range
IO
und File
Enumerator
Enumerator::Lazy
(Ruby 2.0) Set
und SortedSet
NilClass
MatchData
OpenStruct
Struct
Time
Matrix
und Vector
Alle diese können so gespritzt werden:
%Vor%