gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:27:48 28 4
gpt4 key购买 nike

我有以下类(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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com