Dart中能否重载赋值运算符?

7

我有以下类:

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个回答

7

Dart不允许这样做。

不过,你考虑过使用函数调用的方式吗?

基本上,如果在EventableNumber类中定义一个名为'call'的函数,则可以将实例作为函数进行调用:

myEventableNum(34)

如果您决定选择这种方式,建议实现Function接口:
class EventableNumber implements Function {
...
  void call(val) {...}
...
}

希望这能帮到您 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接