class Dry::Core::Memoizable::Memoizer

def define_memoizable_names!

Other tags:
    Api: - private
def define_memoizable_names!
  names.each do |name|
    meth = klass.instance_method(name)
    if meth.parameters.size > 0
      define_method(name) do |*args|
        name_with_args = :"#{name}_#{args.hash}"
        if __memoized__.key?(name_with_args)
          __memoized__[name_with_args]
        else
          __memoized__[name_with_args] = super(*args)
        end
      end
    else
      define_method(name) do
        if __memoized__.key?(name)
          __memoized__[name]
        else
          __memoized__[name] = super()
        end
      end
    end
  end
end