gpt4 book ai didi

compiler-errors - 转让所有权(Genie/Vala)

转载 作者:行者123 更新时间:2023-12-02 10:44:05 25 4
gpt4 key购买 nike

有一个简单的例子:

struct MyStruct
a: int
b: int

def my_proc(): unowned list of MyStruct
var result = new list of MyStruct
var my_struct = MyStruct()
for var i = 1 to 10
my_struct.a = i
my_struct.b = i*i
result.add(my_struct)
return result

init
pass

在编译此代码的情况下,将出现错误:“尚未声明具有强引用的局部变量用作返回值和方法返回类型以转让所有权”。如何更改成功编译的代码?

最佳答案

Genie列表实际上是“伪装”中的Gee.List<T>,它是一个类类型,因此将对其进行引用计数。

另外,类型推断的var变量当前始终是一个自有变量(Vala错误跟踪器中有关于此的错误报告)。

因此,result强烈引用了类实例。您不能将其作为无主引用返回。

我强烈建议您为MyStruct使用类而不是结构。

否则,您将遇到内存管理问题(不对结构进行引用计数)。

然后,您不必担心复制和所有权:

class MyStruct
a: int
b: int

def my_proc(): list of MyStruct
var result = new list of MyStruct
for var i = 1 to 10
var my_struct = new MyStruct()
my_struct.a = i
my_struct.b = i*i
result.add(my_struct)
return result

init
pass

编辑:如果您希望列表包含多个值,则还必须在循环内分配my_struct!我已经更新了代码以反射(reflect)这一点。

关于compiler-errors - 转让所有权(Genie/Vala),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33387995/

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