(Vala)带字符串模板的无主字符串返回类型
不起作用。并且在没有(Vala)带字符串模板的无主字符串返回类型,vala,Vala,不起作用。并且在没有无主的情况下工作 为什么??我看到: Vala中的文字字符串始终由程序模块本身拥有 -在 与普通字符串文字不同,字符串模板不属于程序模块所有?或者我误解了什么?当您使用字符串模板时,它会自动“调用” 因此,虽然实际的模板文本可能由程序模块拥有,但生成的字符串将是正常拥有的字符串(在临时变量中) 因此,字符串模板的结果不属于程序模块,而是属于它所在的方法。因此,编译器消息是正确的。使用字符串模板时,它会自动“调用” 因此,虽然实际的模板文本可能由程序模块拥有,但生成的字符串将是
无主的情况下工作
为什么??我看到:
Vala中的文字字符串始终由程序模块本身拥有-在
与普通字符串文字不同,字符串模板不属于程序模块所有?或者我误解了什么?当您使用字符串模板时,它会自动“调用” 因此,虽然实际的模板文本可能由程序模块拥有,但生成的字符串将是正常拥有的字符串(在临时变量中)
因此,字符串模板的结果不属于程序模块,而是属于它所在的方法。因此,编译器消息是正确的。使用字符串模板时,它会自动“调用” 因此,虽然实际的模板文本可能由程序模块拥有,但生成的字符串将是正常拥有的字符串(在临时变量中)
因此,字符串模板的结果不属于程序模块,而是属于它所在的方法。因此,编译器消息是正确的。字符串模板不是文本字符串 可以在编译时计算文本,因此编译器只需在编译程序中包含字符串的副本。字符串模板OTOH通常在编译时是未知的(想象一下,如果您将
x
作为参数传入,或者从实例或全局变量获取它),那么内存在堆上分配,字符串的内容在运行时计算
换句话说,字符串模板基本上是调用
string.printf
(或者,从C的角度来看,g\u strdup\u printf
)的语法糖。字符串模板不是文字字符串
可以在编译时计算文本,因此编译器只需在编译程序中包含字符串的副本。字符串模板OTOH通常在编译时是未知的(想象一下,如果您将x
作为参数传入,或者从实例或全局变量获取它),那么内存在堆上分配,字符串的内容在运行时计算
换句话说,字符串模板基本上是调用
string.printf
(或者,从C的角度来看,g\u strdup\u printf
)的语法糖。字符串模板是连接字符串和变量的简写。因此,您的程序可以被视为等同于:
unowned string to_string () {
int x = 0;
return @"$x";
// error: Return value transfers ownership but method return type
// hasn't been declared to transfer ownership
}
字符串模板为您调用to_string()
方法。上面的示例产生相同的错误。也许错误消息不太有帮助,但是你需要考虑为什么返回一个未拥有的字符串。< /P>
使字符串无主将关闭Vala对该字符串的内存管理。如果返回一个常量,这可能是相关的,但在您的示例中,字符串是在运行时创建的,因此在堆上分配。这意味着您要使用Vala的内存管理。通常,您应该让Vala使用其默认设置进行内存管理。字符串模板是连接字符串和变量的简写。因此,您的程序可以被视为等同于:
unowned string to_string () {
int x = 0;
return @"$x";
// error: Return value transfers ownership but method return type
// hasn't been declared to transfer ownership
}
字符串模板为您调用to_string()
方法。上面的示例产生相同的错误。也许错误消息不太有帮助,但是你需要考虑为什么返回一个未拥有的字符串。< /P>
使字符串无主将关闭Vala对该字符串的内存管理。如果返回一个常量,这可能是相关的,但在您的示例中,字符串是在运行时创建的,因此在堆上分配。这意味着您要使用Vala的内存管理。通常,您应该让Vala使用其默认设置进行内存管理