gpt4 book ai didi

object-lifetime - 教堂 : Understanding lifetime of managed classes with zip and user-defined iterators

转载 作者:行者123 更新时间:2023-12-04 07:05:28 24 4
gpt4 key购买 nike

我试图了解 owned 的生命周期类,在用户定义的迭代器中使用时。考虑以下代码:

var a = new owned C();
var b = new owned C();
a.i = 2;

forall (a1,b1) in zip(a,b) {
b1 = a1;
}

forall (a1,b1) in zip(a,b) {
writeln(a1, " ",b1);
}

class C {
var i : int;
iter these() {
yield 1;
}

iter these(param tag : iterKind) where tag==iterKind.leader {
yield 1;
}

iter these(param tag : iterKind, followThis) ref
where tag==iterKind.follower {
yield i;
}
}

编译并运行此代码会出现以下错误
(08:54)$ chpl test.chpl --warn-unstable
(08:54)$ ./test
test.chpl:25: error: attempt to dereference nil
(08:54)$ chpl --version
chpl version 1.19.0 pre-release (2c10dbe)

我不清楚什么时候上课 deinit -ed在这里。如果我更换 ownedshared ,此示例按预期工作。更有趣的是,将第一个循环更改为
forall (a1,b1) in zip(a.borrow(),b.borrow()) {

也允许代码工作。在什么情况下,参数会自动强制转换为 borrowed实例?

最佳答案

我很确定这是一个错误。我去看看。

In what cases is an argument automatically coerced into a borrowed instance?



现在,当:
  • 当调用它的方法时(this 参数将是借用)
  • 当传递给 C 类型的参数时或 borrowed C (意思是一样的)。
  • 当传递给一个完全通用的函数参数时。

  • 我不确定我们是否会保留规则 3。但这不是您的情况的问题 - 问题在于一些编译器引入的代码实现了 forall 语句,带走了 owned值(value)。那是一个错误。

    关于object-lifetime - 教堂 : Understanding lifetime of managed classes with zip and user-defined iterators,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53726021/

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