Dart可以重载赋值运算符吗?

时间:2013-11-12 21:38:47

标签: operator-overloading dart

我有以下课程:

class EventableNumber{

  num _val;

  num get val => _val;

  void set val(num v){

    num oldValue = _val;
    _val = v;
    _controller.add(new NumberChangedEvent(oldValue, v));

  }

  StreamController<NumberChangedEvent> _controller = new StreamController<NumberChangedEvent>();
  Stream<NumberChangedEvent> _stream;
  Stream<NumberChangedEvent> get onChange => (_stream != null) ? _stream : _stream = _controller.stream.asBroadcastStream();

  EventableNumber([num this._val = 0]);

}

是否可以重载=赋值运算符?而不是使用val getter和setter来强制事件在值发生变化时触发,如果只是在用户写入myEventableNum = 34然后myEventableNum首先执行时才会这样做会很好onChange事件,而不是myEventableNum.val = 34

1 个答案:

答案 0 :(得分:6)

Dart不允许这样做。

但是,您考虑过函数样式调用吗?

基本上,如果在EventableNumber类中定义一个名为“call”的函数,那么可以将该实例作为函数调用:

myEventableNum(34)

如果你决定采用这种方式,建议实现Function接口:

class EventableNumber implements Function {
...
  void call(val) {...}
...
}

希望这会有所帮助:)