Как получить нильский общий объект в часовне? - PullRequest
2 голосов
/ 26 марта 2020

В настоящее время я работаю над объектами данных часовни и сталкиваюсь с некоторыми проблемами. У меня есть класс с именем Row, который может быть нулем. У меня есть три метода:

    override iter these()ref {
      for row in this.fetchall(){
        yield row;
      }
    }

    override proc fetchone(): shared Row? {
      if this.curRow == this.numRows {
        return nil;
      }
      var row = new shared Row();

      var rowNum: int(32) = 0;
      mysql_data_seek(this.res, this.curRow: c_int);
      var _row = mysql_fetch_row(this.res);

      while(rowNum < this.nFields) {
        var datum: string = __get_mysql_row_by_number(_row, rowNum: c_int);
        var colinfo = this.getColumnInfo(rowNum);
        row.addData(colinfo.name,datum);
        rowNum += 1;
      }
      this.curRow += 1;
      return row;
    }

    override iter fetchall(): borrowed Row {
      var res: shared Row? = this.fetchone();
      while(res != nil) {
        yield res!;
        res = this.fetchone();
      }
    }

Как вы можете видеть, в одном случае я возвращаю заемный объект, а в других - возвращаю общий. Есть ли способ, чтобы я возвращал только один тип, совместно используемый или заимствованный, как в настоящее время в подобных ситуациях, я получаю ошибку.

        var res: Row? = cursor.fetchone();
        for row in cursor {
            res = row;
            //get row data by column name and print it.
            writeln("name = ", row["name"]," email = ", row["email"] );
        }

1 Ответ

2 голосов
/ 26 марта 2020

Идея в том, чтобы набрать.

override iter fetchall(): shared Row {
  var res: shared Row? = this.fetchone();
  while(res != nil) {
    try! {
      yield res: shared Row;
    }
    res = this.fetchone();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...