2013-01-24 5 views
9

:これは、最小の定型コードを有するプッシュベースの通知を容易にし、従って、複数の加入者モデルを可能C位の<code>event</code>の有することができるC#のクラスとインタフェースでのイベント

public class Foo 
{ 
    public event Action SomethingHappened; 

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

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

相当のイディオムはScalaにありますか?私が探しているです:

  • が取り付け

    1. 最小の定型コード
    2. シングル出版社、複数の加入者は/加入者をScalaのドキュメントでの使用の

    例としては素晴らしいことでしょう切り離します。私はScalaでの実装のC#イベントを探していません。むしろ、私はScalaの等価イディオムを探しています。

  • +1

    これは役に立つかもしれ:http://stackoverflow.com/questions/6814246/in-scala-how-would-i-combine-event-driven-programming-with-a-functional-approac – daryal

    答えて

    2

    スケーラのための慣習的な方法は、オブザーバパターンを使用しないことです。 Deprecating the Observer Patternを参照してください。

    実装についてはthis answerをご覧ください。

    +3

    方法"観察者の問題を使わないでください"と言っているのは、OPを少しでも(実際に彼の質問に答えるという点で)助けてくれますか? –

    +1

    私は、「それはまったく好きではない、関連するやり方でやってはいけない」と思っています。 – Jesper

    +0

    @KirkWoll:OPは、答えをupvoted、何かを正しくしている必要があります=) – FMM

    2

    This is a nice article how to implement C# events in Scala本当に役に立ちそうだと思います。

    ベースイベントクラス。

    class Event[T]() { 
    
        private var invocationList : List[T => Unit] = Nil 
    
        def apply(args : T) { 
        for (val invoker <- invocationList) { 
         invoker(args) 
        } 
        } 
    
        def +=(invoker : T => Unit) { 
        invocationList = invoker :: invocationList 
        } 
    
        def -=(invoker : T => Unit) { 
        invocationList = invocationList filter ((x : T => Unit) => (x != invoker)) 
        } 
    
    } 
    

    などです。

    val myEvent = new Event[Int]() 
    
    val functionValue = ((x : Int) => println("Function value called with " + x)) 
    myEvent += functionValue 
    myEvent(4) 
    myEvent -= functionValue 
    myEvent(5) 
    
    +0

    質問から: "私はScalaでC#イベントの実装を探していません。" – FMM

    +2

    リンクを投稿する場合は、少なくとも基本的な抜粋を提供してください。時間が経つにつれて、ページが利用できなくなり、将来の読者は掘り下げる方向がありません。 –

    関連する問題