Posted about 5 years ago. Visible to the public.

Array Function

Let’s say we’re making a wish list class. To add stuff to a wish list, we’ll first instantiate it. For maximum convenience of client programmers, we want to support all likely calling conventions for adding objects to the list. Naturally, we want them to be able to add a single object to the list. But if they pass an array of multiple items, we want to support this form as well. And if for some reason a nil is passed, we want to just quietly ignore it, instead of adding it to the list or raising an exception.

Copy
class WishList attr_reader :items def initialize @items = [] end def add(*items) @items.concat(items.flat_map(&method(:Array))) end end list = WishList.new list.add(["Fancy boots", "Boot socks"]) list.add(nil) list.add("Rancilio Silvia Espresso Machine") list.add("A Zeppelin", "200,000 cubic meters of helium") list.items # => ["Fancy boots", # "Boot socks", # "Rancilio Silvia Espresso Machine", # "A Zeppelin", # "200,000 cubic meters of helium"]

Note that Array({key: 'value'}) results in [[:key, 'value']] while ActiveSupport’s Array.wrap has less surprising behavior.

Copy
Array.wrap({key: 'value'}) # => [{:f=>1}]

Owner of this card:

Avatar
Alexander M
Last edit:
about 5 years ago
by Alexander M
Posted by Alexander M to Ruby and RoR knowledge base
This website uses short-lived cookies to improve usability.
Accept or learn more