# File lib/criteria.rb, line 58
    def [](*args)
      if @field.is_a?(Criterion)
        field = @field[*args]
        args.shift
      else
        field = @field
      end

      chain = @chain.map {
        | link |
        if link.is_a?(Placeholder)
          args.shift
        elsif link.is_a?(Criterion)
          link[*args]
        else
          link
        end
      }

      # This is somewhat evil, but not as evil as doing it manually
      q = self.dup
      q.instance_eval {
        @field = field
        @chain = chain
      }
      return q
    end