在属性的haxe文档中,有一个例子:
class C {
public var x(get,set) : Int;
function get_x(){ return 123; }
function set_x(value){
doSomethingWith(value);
return 123;
}
}
但是为什么我们必须在上面的x的setter中返回一个值?有充分的理由吗?
答案 0 :(得分:3)
原因是,在Haxe中,赋值表达式确实返回一个值,例如
var a;
trace(a = 3.14);//3.14
这很自然,因为我们可以将作业链接在一起:
var test = a = 3.14; //test will be 3.14
例如,有一个奇怪的类,
class Weird {
public function new():Void {}
public var x(get, set):Int;
function get_x() return x;
function set_x(v:Int):Int {
x = v;
return 123;
}
}
var weird = new Weird();
trace(weird.x = 456); //123
trace(weird.x); //456
var test = weird.x = 456; //test will be 123
但是,当然,通常我们只是返回setter的输入,因为它更符合逻辑:
function set_x(v:Int):Int {
return x = v;
}
答案 1 :(得分:0)
有时候让一个setter函数返回之前的值是很好的,所以你可以像这样编码:
oldval=set(newval);
do_something();
set(oldval);
暂时设置一个新值,然后在完成后恢复旧值。