gpt4 book ai didi

haxe - Haxe属性-Getters和Setters与@ :isVar

转载 作者:行者123 更新时间:2023-12-04 13:49:41 25 4
gpt4 key购买 nike

我的问题是关于haxe中的属性。
如果我理解正确,如果我做出这样的属性(property)
根据haxe文档,var propertyInt(get, set):Int;并不是一个真正的变量。但是我可以通过这样修改它来使其成为变量@: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个以上的属性,并且您可以想象为每个属性设置此方法在后面可能会非常痛苦。那么最好的方法是什么?

最佳答案

这是documentation关于物理属性(也称为后备字段)必须说的:

A field is considered to be physical if it is either

  • variable
  • a property with the read-access or write-access identifier being default or null
  • a property with :isVar metadata


因此,您可以设置一个完全由计算值组成的属性。考虑一个只读属性,该属性为您提供矩形的面积作为宽度和高度的函数,或者考虑一个由其他属性支持的属性,该属性仅以不同单位返回/设置宽度和高度。或者,也许您只是想以不同的方式命名您的支持字段,例如 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;

关于haxe - Haxe属性-Getters和Setters与@ :isVar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27931070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com