Skip to content

Instantly share code, notes, and snippets.

@phillbaker
Created May 24, 2016 02:22
Show Gist options
  • Save phillbaker/787165d91ed2a58dcf65e1ae92ab035c to your computer and use it in GitHub Desktop.
Save phillbaker/787165d91ed2a58dcf65e1ae92ab035c to your computer and use it in GitHub Desktop.
require 'forwardable'
class MyQueue
extend Forwardable
attr_reader :queue
def initialize
@queue = []
end
def_delegator :@queue, :push, :mypush
def_delegator :@queue, :push
end
require 'forwardable'
module MyQueue
class<<self
extend Forwardable
def queue
@queue ||= []
end
def_delegator :@queue, :push, :mypush
def_delegator :@queue, :push
end
end
MyQueue.push(123) # => NoMethodError: undefined method `push' for nil:NilClass
MyQueue.queue # => []
MyQueue.push(123) # => [123]
require 'forwardable'
module MyQueue
class<<self
extend Forwardable
def queue
@queue ||= []
end
def_delegator :queue, :push, :mypush
def_delegator :queue, :push
end
end
MyQueue.push(123) # => [123]
require 'forwardable'
module MyQueue
class<<self
extend SingleForwardable
def queue
@queue ||= []
end
def_delegator :@queue, :push, :mypush
def_delegator :@queue, :push
end
end
MyQueue.push(123) # => NoMethodError: undefined method `push' for MyQueue:Module
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment