В настоящее время я работаю над объектами данных часовни и сталкиваюсь с некоторыми проблемами. У меня есть класс с именем 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"] );
}