Vala 中函数和属性的区别
Difference between functions and properties in Vala
这里是 Vala 的新手...试图了解属性和 getters/setters 之间的区别。
public class Person {
public string name {
get {
XPath.NodeSet* nodes = search (node, "/name");
return nodes->item (0)->get_content ();
}
}
public string get_name() {
XPath.NodeSet* nodes = search (node, "/name");
return nodes->item (0)->get_content ();
}
}
第二个 get_name ()
函数按预期工作。 属性 没有。它抛出:
Return value transfers ownership but function return type hasn't been declared to transfer ownership
return nodes->item (0)->get_content ();
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
我在这里错过了什么? get_content ()
没有返回字符串还是函数解决方案执行了一些转换魔术?
谢谢!
通常,函数 return 拥有值(调用者必须释放),但是 属性 getter return 未拥有的值(调用者不能释放)。因此,由 get_context ()
编辑的内存 return 将被释放,并且悬空指针 return 编辑。值属性 return 需要由其他地方拥有的值支持( 例如 ,在字段中)或更改要拥有的 return 类型,以便 Vala将复制该值。
这里是 Vala 的新手...试图了解属性和 getters/setters 之间的区别。
public class Person {
public string name {
get {
XPath.NodeSet* nodes = search (node, "/name");
return nodes->item (0)->get_content ();
}
}
public string get_name() {
XPath.NodeSet* nodes = search (node, "/name");
return nodes->item (0)->get_content ();
}
}
第二个 get_name ()
函数按预期工作。 属性 没有。它抛出:
Return value transfers ownership but function return type hasn't been declared to transfer ownership
return nodes->item (0)->get_content ();
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
我在这里错过了什么? get_content ()
没有返回字符串还是函数解决方案执行了一些转换魔术?
谢谢!
通常,函数 return 拥有值(调用者必须释放),但是 属性 getter return 未拥有的值(调用者不能释放)。因此,由 get_context ()
编辑的内存 return 将被释放,并且悬空指针 return 编辑。值属性 return 需要由其他地方拥有的值支持( 例如 ,在字段中)或更改要拥有的 return 类型,以便 Vala将复制该值。