gpt4 book ai didi

memory-management - 如何在 Chapel 中产生一个 nilable 共享对象?

转载 作者:行者123 更新时间:2023-12-04 10:20:34 30 4
gpt4 key购买 nike

目前,我正在研究 Chapel 数据对象,但遇到了一些问题。我有一个名为 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"] );
}

最佳答案

这个想法是类型转换。

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

关于memory-management - 如何在 Chapel 中产生一个 nilable 共享对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60873402/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com