# File lib/multimethod/signature.rb, line 276
    def score(args)
      if @min_args > args.size
        # Not enough args
        score = nil
      elsif @max_args && @max_args < args.size
        # Too many args?
        # $stderr.puts "max_args = #{@max_args}, args.size = #{args.size}"
        score = nil
      else
        # Interpret how close the argument type is to the parameter's type.
        i = -1
        score = args.collect{|a| parameter_at(i = i + 1).score(a)}

        # Handle score for trailing restargs.
        if @restarg || @default
          while (i = i + 1) < @parameter.size
            # $stderr.puts "  Adding score i=#{i}"
            # nil means there is no argument for this parameter.
            score << parameter_at(i).score(nil)
          end
        end

        # If any argument cannot match, avoid this method entirely.
        score.flatten!
        score = nil if score.index(nil)
      end

      # $stderr.puts "  score(#{to_s}, #{args.inspect} => #{score.inspect})"

      score
    end