Skip to content

Instantly share code, notes, and snippets.

@lesniakania
Created November 14, 2015 21:59
Show Gist options
  • Save lesniakania/dfb9c28594f01d160120 to your computer and use it in GitHub Desktop.
Save lesniakania/dfb9c28594f01d160120 to your computer and use it in GitHub Desktop.
class ArrayMap
def initialize(array)
@array = array
end
def map(method)
[method.call(head)] + tail.map(method)
end
def head
@array[0]
end
def tail
ArrayMapFactory.build(@array[1..-1])
end
end
class EmptyArrayMap < ArrayMap
def map(method)
[]
end
end
class ArrayMapFactory
CONFIG = { 0 => EmptyArrayMap }
def self.build(array)
klass = CONFIG[array.count] || ArrayMap
klass.new(array)
end
end
def map(array, method)
ArrayMapFactory.build(array).map(method)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment