Haxe Property - 吸引者和二传手与@:isVar

时间:2015-01-13 20:37:44

标签: haxe

我的问题是关于haxe的属性。 如果我理解正确,如果我做这样的财产 var propertyInt(get, set):Int;根据haxe文档,它并不是真正的变量。但我可以通过这种方式修改变量 @:isVar var propertyInt(get, set):Int;。否则我需要制作两种方法:

function get_propertyInt()
    return propertyInt;

function set_properyInt(i)
    return propertyInt = i;

所以我的问题是:如果我专门使用@:isVar var propertyInt(get, set):Int;,这有关系吗?例如,我的班级中有超过5个属性,你可以想象为每个属性制作这些方法可能会让后方产生巨大的痛苦。那么最好的方法是什么?

1 个答案:

答案 0 :(得分:11)

以下是documentation关于物理属性的说法(也称为支持字段):

  

如果字段是

,则认为该字段是物理字段      
      
  • 可变
  •   
  • 具有读访问权限或写访问标识符defaultnull
  • 的属性   
  • 具有:isVar元数据
  • 的媒体资源   

因此,您可以设置一个完全由计算值组成的属性。认为只读属性为矩形区域提供宽度和高度的函数,或者考虑由其他属性支持的属性,只返回/设置不同单位的宽度和高度。或者您可能只想以不同的方式命名支持字段,例如m_widthm_height

:isVar在上面列出的属性访问规则等让编译器认为不需要支持字段的情况下很有用。在这种情况下,代码将失败(再次来自文档):

  // This field cannot be accessed because it
  // is not a real variable
  public var x(get, set):Int;

  function get_x() {
    return x;
  }

  function set_x(x) {
    return this.x = x;
  }

通过添加:isVar,您基本上可以告诉编译器您绝对需要支持字段。您的特定情况的另一个选项是使用default,default,在这种情况下,编译器知道需要自动支持字段,并且应根据属性的访问级别(publicprivate):

public var propertyInt(default, default):Int;

在这种情况下,您也可以直接使用变量,因为净效果本质上是相同的:

public var propertyInt : Int;