1

我最近被这样一个事实绊倒了:设置 an 的 setter 的预期类型IntInt -> Int.

为什么 setter 会返回一个值?这个值有什么意义?

4

3 回答 3

3

除了此处的其他答案之外,它还允许您执行以下操作:

x = y = z = 5;
于 2013-01-16T22:05:57.747 回答
2

setter 返回的值是赋值表达式的值。

例如,如果您要执行以下操作:

public var x(setX, getX): Int

public function setX(val: Int): Int {
    return 5;
}

static function main() {
    neko.Lib.print(x = 2); // Prints 5
}

Haxe 会打印出 5。setter 返回 set 表达式的值。当然,在这种情况下,这是一个荒谬的值。

于 2012-12-20T20:38:30.967 回答
2

在现实世界中,它允许在赋值时实现按值复制的方式,例如:

public var pos(set_pos, default):Point;
function set_pos(newPos:Point) {
    pos.x = newPos.x
    pos.y = newPos.y;
    return pos;
}

并且在实现可能失败的设置器时也有一个合理的回报,例如:

public var positiveX(default, set_positiveX):Int;
function set_positiveX(newX:Int) {
    if (newX >= 0) x = newX;
    return x;
}

trace(x = 10); // 10
trace(x = -4); // 10
trace(x);      // 10

而你会得到这样的东西:

trace(x = 10); // 10
trace(x = -4); // -4
trace(x);      // 10

即使设置器不修改值,AS3 中也会发生这种情况。如果你不能这样做,显然第一个,其中 x = -4 返回 10 更好:)

于 2013-01-09T16:05:25.490 回答