Haxe 属性 - getter 和 setter 与 @:isVar
Haxe Property - getters and setters versus @:isVar
我的问题是关于 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;
有关系吗?例如,我的 class 中有超过 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
因此您可以设置一个完全由计算值组成的 属性。想想一个只读的 属性 给你一个矩形的面积作为宽度和高度的函数,或者想想一个 属性 由其他一些 属性 和 returns/sets 宽度和高度在不同的单位。或者你可能只是想以不同的方式命名你的支持字段,比如 m_width
和 m_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
,在这种情况下,编译器知道需要一个自动支持字段,并且应该根据 属性 的访问级别限制访问(public
或 private
):
public var propertyInt(default, default):Int;
那你也可以直接使用变量,因为最终效果本质上是一样的:
public var propertyInt : Int;
我的问题是关于 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;
有关系吗?例如,我的 class 中有超过 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
ornull
- a property with
:isVar
metadata
因此您可以设置一个完全由计算值组成的 属性。想想一个只读的 属性 给你一个矩形的面积作为宽度和高度的函数,或者想想一个 属性 由其他一些 属性 和 returns/sets 宽度和高度在不同的单位。或者你可能只是想以不同的方式命名你的支持字段,比如 m_width
和 m_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
,在这种情况下,编译器知道需要一个自动支持字段,并且应该根据 属性 的访问级别限制访问(public
或 private
):
public var propertyInt(default, default):Int;
那你也可以直接使用变量,因为最终效果本质上是一样的:
public var propertyInt : Int;