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

Dan*_*son 4 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]);

}
Run Code Online (Sandbox Code Playgroud)

是否可以重载=赋值运算符?而不是使用valgetter和setter强制事件在值发生变化时触发,如果它可以在用户写入myEventableNum = 34然后myEventableNum首先执行其onChange事件时完成,而不是myEventableNum.val = 34.

Sam*_*Sam 6

Dart不允许这样做.

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

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

myEventableNum(34)
Run Code Online (Sandbox Code Playgroud)

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

class EventableNumber implements Function {
...
  void call(val) {...}
...
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 :)