为什么setter需要在Haxe中返回一个值?

时间:2012-12-20 20:38:31

标签: haxe

我最近因为设置Int的预设者的预期类型为Int -> Int而被绊倒。

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

3 个答案:

答案 0 :(得分:3)

这里的其他答案的小补充,它允许你这样做:

x = y = z = 5;

答案 1 :(得分: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表达式的值。当然,在这种情况下,这是一个荒谬的价值。

答案 2 :(得分:2)

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

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

并且在实施可能失败的setter时也有明智的回报,例如:

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

即使setter没有修改该值,AS3中会发生什么。如果你不能这样做,显然第一个,其中x = -4返回10更好:)