我正在查看Coursera中的Reactive Programming课程,该课程使用Scala实现Observer模式。在那里,Martin Odersky说Observer模式强制命令式编程,我们可以看到,因为订阅者的处理程序有Unit
类型。
他在这说:https://class.coursera.org/reactive-002/lecture/107 9点40分
我真的不明白:
1.为什么处理程序需要Unit
类型?
2. Observer模式如何强制命令式编程?
答案 0 :(得分:7)
我没有查看发布的视频,所以我的答案基于OP的原始问题。
根据模式的定义,处理程序是回调;因此,它们具有Unit
返回类型,因为它们描述了将响应通知而执行的一些行为。这是副作用的定义
因此,观察者模式是一种本质上命令式的模式:函数的调用者(例如notifyObservers(观察者))并不关心函数本身的结果,但它依赖于它将具有的副作用即可。这是必要的编程。
作为旁注,Unit
是结果类型的事实不是严格必要,但如前所述,传达没有兴趣除了副作用。有人可能会对该方法进行一般建模并返回一些更有意义的类型,但由于观察者模式在实践中的使用方式,这可能会被忽略......
答案 1 :(得分:2)
因为如果它们的确具有Unit
以外的返回类型,则observable调用处理程序的顺序变得很重要。不是说observable现在应该知道返回类型并且应该能够处理它们,这不是观察者模式的一部分。
一般来说,观察者模式意味着观察者和观察者都应该有一个状态,因为观察者被设计为对可观察的事件作出反应,并且这种模式描述了这些对象的状态之间的反应。
如果您转到wiki并阅读观察者模式定义,您会发现in which an object, called the subject, maintains a list of its dependents, called observers, and notifies them automatically of any state changes,
,其中包含state
字,这已经意味着我们不再拥有FP了它不可能是纯粹的