2017-08-23 7 views
3

F#はイベント用の構文がかなり使いやすく、カスタムコードなしでオブザーバブルとして登録することができます。私はメンバ変数に更新を公開するイベントを作成しています。このイベントを観測可能なものとして購読するつもりですが、既存の値(私が知っていると思う)をサブスクリプションにプッシュすることを望みます。これはイベントシンタックスで行うことが可能で簡単ですか?たとえば、イベントシンタックスを使用して適切なオブザーバブルを作成する必要がありますか? BehaviorSubject?サブスクリプション時に "既存のイベント値"を公開する

+0

「既存の価値」とはどういう意味ですか?発生したイベントに関連付けられた値のみが存在します。あなたが言うことは、Gjallarhornの信号を私に思い出させるが。 https://github.com/ReedCopsey/Gjallarhorn – TeaDrivenDev

+0

私は観察の観点から考えています。イベントは、一部のメンバー変数への更新を公開します。私は質問でこれを明らかにした。 – cmeeren

+0

それはまさにGjallarhornに動機づけられたものです。 Observableは値を保持しません。 GjallarhornのISignalは、この正確なコンセプトで観察可能に拡張されています。 –

答えて

1

これは、その使用方法に大きく依存します。

イベントからオブザーバブルに変換すると、EventArgsはオブザーバブルの型としてマップされます。 「標準」イベントでは、値はありません(EventArgsは情報を持ちません)。

しかし、あなたは簡単にイベントのために、通常の.NETガイドラインに違反し、値そのものを使用するカスタムイベントタイプ、またはイベントを使用することができます。

let evt = Event<int>() 
let obs = evt.Publish :> IObservable<_> 

obs |> Observable.add (fun v -> printfn "New value: %d" v) 

evt.Trigger 3 
evt.Trigger 4 

言われていること、あなたのユースケースに応じて、あなたが望むことGjallarhornを見てください。このライブラリは、変更可能な値への変更を追跡し、うまくシグナリングするために特別に設計されました。これは、現在の値を含む観測値である「信号」という概念を中心に構築されています。これは上記のコンセプトをファーストクラスにします。必要に応じてIObservableとして直接使用できる何か(信号)を渡すことができますが、常に基礎となる現在の値を取得するためにも使用できます。実際には、これは多くのユースケースを劇的に簡素化します。

関連する問題