def payloads(&blk)
      return self.pro(&blk) if @is_loopback

      if @payload_struct.nil?
        payload_cols = cols.dup
        payload_cols.delete_at(@locspec_idx)
        @payload_struct = Bud::TupleStruct.new(*payload_cols)
        @payload_colnums = payload_cols.map {|k| cols.index(k)}
      end

      retval = self.pro do |t|
        @payload_struct.new(*t.values_at(*@payload_colnums))
      end
      retval = retval.pro(&blk) unless blk.nil?
      return retval
    end
def payloads(&blk)
      return self.pro(&blk) if @is_loopback

      if @payload_struct.nil?
        payload_cols = cols.dup
        payload_cols.delete_at(@locspec_idx)
        @payload_struct = Bud::TupleStruct.new(*payload_cols)
        @payload_colnums = payload_cols.map {|k| cols.index(k)}
      end

      retval = self.pro do |t|
        @payload_struct.new(*t.values_at(*@payload_colnums))
      end
      retval = retval.pro(&blk) unless blk.nil?
      return retval
    end
project to the non-address fields