【发布时间】:2019-08-27 15:27:32
【问题描述】:
我使用 StreamBuilder、StreamController、BehaviorSubject、Stream 等已经有一段时间了。但我仍然对一些定义感到困惑。尤其是这个问题,StreamController 和 BehaviorSubject 是 Dart 中的 Stream 吗?
之所以有这个问题,是因为我在网上可以找到以下的词/语录:
- BehaviorSubject 是一个特殊的 StreamController...(来自the API doc)
- Observable 是一个扩展 Stream 的包装类。 (Observable 是一个流)
- BehaviorSubject 扩展了 Subject (BehaviorSubject 是一个 Subject)
- Subject 扩展 Observable(Subject 是一个 Observable)
从在线文档的上述 4 点来看,它给了我: BehaviorSubject 是一个 Observable,然后是一个 Stream。所以 BehaviorSubject 是一个流。并且 BehaviorSubject 也是一个 StreamController。因此 StreamController 是一个 Stream。
但是如果 StreamController 是一个 Stream,这将与其他一些文章相矛盾,即 Stream 实际上是 StreamController 的一部分,并且您从 StreamController.stream 中获取 Stream。
如果我们谈论 Sink,就会更加混乱。
StreamController 实现 StreamSink。所以 Sink 是一个特殊的 StreamController。
所以从以上所有的话,我有点得到以下结果:
BehaviorSubject = StreamController = Observable = Stream = Sink
到最后,一切都是一样的……我疯了吗?
已编辑:(我现在明白了。希望它是正确的)
为了澄清我的困惑,我想我必须理解"BehaviorSubject is a special StreamController"这句话。
通过谷歌搜索和检查一些 sdk 代码,我想我理解 BehaviorSubject 是一个特殊的 StreamController,但反之则不然。这将解决我的困惑。 BehaviorSubject 扩展了 Subject,Subject 实现了 StreamController。因此"BehaviorSubject is a special StreamController" 是正确的。但我不能说 StreamController 是一个 BehaviorSubject。因此,即使 BehaviorSubject 实际上是 Stream,我也不能说 StreamController 是 Stream。
我希望我上面的理解是正确的。
【问题讨论】: