【问题标题】:Difference between functions and properties in ValaVala中函数和属性的区别
【发布时间】:2017-03-06 10:52:03
【问题描述】:

这里是 Vala 的新手...试图了解属性和 getter/setter 之间的区别。

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 () 是没有返回字符串还是函数解决方案做了一些转换魔法?

谢谢!

【问题讨论】:

    标签: properties vala


    【解决方案1】:

    通常,函数返回拥有的值(调用者必须释放),但属性 getter 返回非拥有的值(调用者不得释放)。因此,get_context () 返回的内存将被释放并返回一个悬空指针。 values 属性返回需要由其他地方拥有的值支持(例如,在字段中),或者更改要拥有的返回类型,以便 Vala 复制该值。

    【讨论】:

    • 谢谢,我知道了。我需要一个“类变量”(用 Ruby 语言)来将值保存在内存中!
    • 没有。 Ruby 中的类变量是 Vala 中的静态变量。它可以是字段(实例变量)、类变量、常量或其他类中的任何一个。
    猜你喜欢
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2018-04-14
    • 2016-04-29
    相关资源
    最近更新 更多