C# Scala中的onMethod()(观察者模式)
我忘记了一件基本的事情。比方说,我在Scala中有一个对象或类:C# Scala中的onMethod()(观察者模式),c#,scala,C#,Scala,我忘记了一件基本的事情。比方说,我在Scala中有一个对象或类: object MyClass { def start(a: Int) = { ... } } 当调用start方法时,我想在调用它时执行一些操作。我想知道,这是添加onStart函数的Scala方式吗 object MyClass { def start(a: Int) = { //....doing something onStart(a) } } 在C中,我会使用事件。但在这里,我要么完全忘记
object MyClass {
def start(a: Int) = { ... }
}
当调用start
方法时,我想在调用它时执行一些操作。我想知道,这是添加onStart
函数的Scala方式吗
object MyClass {
def start(a: Int) = {
//....doing something
onStart(a)
}
}
在C中,我会使用事件
。但在这里,我要么完全忘记了该做什么,要么Scala本身没有这样的能力,我能做的就是使用observer模式
如何“订阅”onStart(a)(如果必须的话)?如果没有,我应该使用什么?不过,我可以在
start
中添加一个额外的参数(函数回调)。您可以使用并创建(不引人注意的)发布者-订阅者场景。或者使用Scala.React
,就像使用反应式扩展一样。另一个类似于Scala库的反应式扩展是RxJava(),它有一个Scala适配器。@AlexeyRomanov我想要一个最简单的解决方案possible@PatrykĆwiek我想要一个最简单的解决方案,没有第三方库。@Alex那么您可以使用Publisher
和Subscriber
很好,它们是内置的-scala.collection.mutable
包。
import scala.collection.mutable.Publisher
import scala.collection.mutable.Subscriber
abstract class Event
case class OnStart(a : Int) extends Event
object MyClass extends Publisher[Event] {
def start(a: Int) = {
// do something handy
publish(OnStart(a))
}
}
object Client extends App with Subscriber[Event, Publisher[Event]] {
MyClass.subscribe(this)
MyClass.start(10)
override def notify(pub: Publisher[Event], event: Event) : Unit = {
event match {
case OnStart(a) => print("OnStart event")
}
}
}