Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Scala中的onMethod()(观察者模式)_C#_Scala - Fatal编程技术网

C# Scala中的onMethod()(观察者模式)

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中,我会使用事件。但在这里,我要么完全忘记

我忘记了一件基本的事情。比方说,我在Scala中有一个对象或类:

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")
        }
    }   
}