忍者ブログ
おそらく活動状況とか、他愛もないこととか書きます。 μ崎みのりの気ままで気まぐれなブログです。 作曲とか、ゲーム製作なんかしてます。
[579]  [578]  [577]  [576]  [575]  [574]  [573]  [572]  [571]  [570]  [569
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Unityを先日使い始めた私ですが、どうやらUniRxってのを使うと便利になるようでして。
調べていくとLINQのひとつらしいことが分かりました。

……いいですね、LINQ。

Rxがクエリする対象は時間軸に乗ってやってくるメッセージ。
値がずらーっと空間上に並んでるイメージのコレクション(IEnumerable<T>)と同じように、
値が時間軸上に並んでいるイメージ(IObservable<T>)でしょうか。

で、詳しい説明は省くとして、Rxにひどく感銘を受けたので似たようなものを自作ゲームフレームワークに実装することにしました。
ちなみに既存のインターフェイスは使わず、ゲームフレームワークとうまくマッチするような実装にしています。


現状で私が感じるRxの問題点は、「既に終わった処理から値を取り出せないこと」です。
(System.IObserver<T>に定義されているメソッドではどうやっても実現不可能)
Rxにとっては完了後のことはあまり重要じゃないと思うので、これはこれでいいんでしょうけど。
私が使いたい機能とはマッチしないんです←ここ重要。

それで似たようなものを実装することにしたわけですね。
既存のRxとの違いは、OnError(Exception) と OnCompleted() がひとつのメソッド
OnEnded(Result<T, Exception>)に統合されてることです。
この引数には正常終了した場合は戻り値、エラーの場合は例外が渡されるしくみで、
既存のRxでできなかった「既に終わった処理から値を取り出す」ことが可能です。
これが await 演算子と相性がいいのですが、本物に勝てるとは思っていません。

ただ拡張メソッドが大量すぎて実装が大変なので、少し時間はかかりそうです。
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
忍者ブログ [PR]