operator-overloading - Dart 你可以重载赋值运算符吗?

标签 operator-overloading dart

我有以下类(class):

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 .

最佳答案

Dart 不允许这样做。

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

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

myEventableNum(34)

如果你决定走这条路,建议实现 Function 接口(interface):
class EventableNumber implements Function {
...
  void call(val) {...}
...
}

希望这可以帮助 :)

关于operator-overloading - Dart 你可以重载赋值运算符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19940440/

相关文章:

c++ - 在 C++ 中重载运算符 []

C++双向运算符,可能吗?

C++ 子类重载乘法运算符隐藏基重载解引用运算符

c++ - 为具有不同大小的非类型参数的模板重载 operator+=

flutter - 任务 ':app:processDebugResources' 执行失败

json - 如何在Flutter ListView构建期间测试json属性是否存在

arrays - 在dart中解析对象(不支持的操作:无法添加到定长列表)

Flutter 提供商不允许我访问数据

具有不同模板参数值的模板结构的 C++ 访问 protected 成员

flutter - 在NetworkImage类抖动中使用loadingBuilder