我最近因为设置Int
的预设者的预期类型为Int -> Int
而被绊倒。
为什么setter会返回一个值?这个价值有多大意义?
答案 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更好:)