def visit_this_class(receiver, clazz, args)
    raise "Visitor Error: Too few arguments passed. min = #{@min_args}" unless args.length >= @min_args
    if @max_args
      raise "Visitor Error: Too many arguments passed. max = #{@max_args}" unless args.length <= @max_args
    end
    if method_name = @cache[clazz]
      return receiver.send(method_name, clazz, *args)
    else
      clazz.ancestors().each do |ancestor|
        name = ancestor.name
        next if name.nil?
        method_name = :"#{@message}_#{name.split(DOUBLE_COLON).last}"
        next unless receiver.respond_to?(method_name, true)
        @cache[clazz] = method_name
        return receiver.send(method_name, clazz, *args)
      end
    end
    raise "Visitor Error: the configured receiver (#{receiver.class}) can't handle instance of: #{clazz}"
  end
def visit_this_class(receiver, clazz, args)
    raise "Visitor Error: Too few arguments passed. min = #{@min_args}" unless args.length >= @min_args
    if @max_args
      raise "Visitor Error: Too many arguments passed. max = #{@max_args}" unless args.length <= @max_args
    end
    if method_name = @cache[clazz]
      return receiver.send(method_name, clazz, *args)
    else
      clazz.ancestors().each do |ancestor|
        name = ancestor.name
        next if name.nil?
        method_name = :"#{@message}_#{name.split(DOUBLE_COLON).last}"
        next unless receiver.respond_to?(method_name, true)
        @cache[clazz] = method_name
        return receiver.send(method_name, clazz, *args)
      end
    end
    raise "Visitor Error: the configured receiver (#{receiver.class}) can't handle instance of: #{clazz}"
  end
Visit an explicit receiver