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

Bob*_* T. 6 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;
Run Code Online (Sandbox Code Playgroud)

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

Jen*_*nsG 11

以下是文档对物理属性(也称为支持字段)的说明:

如果是,则认为该字段是物理的

  • 变量
  • 具有读访问权限或写访问标识符的属性为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;
  }
Run Code Online (Sandbox Code Playgroud)

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

public var propertyInt(default, default):Int;
Run Code Online (Sandbox Code Playgroud)

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

public var propertyInt : Int;
Run Code Online (Sandbox Code Playgroud)