对于C#的事件,Scala中惯用的等价物是什么

FMM*_*FMM 9 c# scala

在C#中,类和接口可以有event:

public class Foo
{
    public event Action SomethingHappened;

    public void DoSomething()
    {
        // yes, i'm aware of the potential NRE
        this.SomethingHappened();
    }
}
Run Code Online (Sandbox Code Playgroud)

这有助于以最少的样板代码进行基于推送的通知,并启用多用户模型,以便许多观察者可以监听事件:

var foo = new Foo();
foo.SomethingHappened += () => Console.WriteLine("Yay!");
foo.DoSomething();  // "Yay!" appears on console. 
Run Code Online (Sandbox Code Playgroud)

Scala中有相同的成语吗?我正在寻找的是:

  1. 最小的样板代码
  2. 单个发布者,多个订阅者
  3. 附加/分离订阅者

在Scala文档中使用它的例子非常棒.我不是在寻找Scala中C#事件的实现.相反,我正在寻找Scala中的等效成语.

sen*_*nia 2

Scala 的惯用方式是不使用观察者模式。请参阅弃用观察者模式

看一下这个答案以了解实施情况。

  • 说“不要使用观察者问题”对OP有什么帮助(就实际回答他的问题而言)? (3认同)
  • @om-nom-nom 我会让你弄清楚这一点。 (3认同)