我们必须在二传手处返回价值吗?

时间:2013-12-09 10:14:52

标签: haxe

在属性的haxe文档中,有一个例子:

class C {

 public var x(get,set) : Int;

 function get_x(){ return 123; } 

 function set_x(value){ 
   doSomethingWith(value); 
   return 123; 
 } 
}

但是为什么我们必须在上面的x的setter中返回一个值?有充分的理由吗?

2 个答案:

答案 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);

暂时设置一个新值,然后在完成后恢复旧值。