11

私は現在 Scala 開発をいじっていますが、物理演算を処理するために box2d などのライブラリと統合する必要があります。問題は、独自の状態を管理する外部ライブラリに依存する必要があることです。box2d ワールドに渡すボディを追跡します。プレイ中の側面を要約するには:

  • Box2d は世界の状態を管理し、各ティック/ステップの後にそれらを変更します
  • この世界に渡される身体を (FP を使用して) あなたが作成します。
  • Box2d はこれらのボディの状態を内部的に変更します
  • オブジェクトを追跡するには、オブジェクトへの参照を保持します
  • 本体の情報を使用してコードをレンダリングする可能性が高いため、その情報を追跡する唯一の方法は、可変コレクション内のすべての参照を追跡することだと思います。すべてのフレームに耐える必要があります。

だから私の質問は:

これらの参照を (関数型プログラミングの場合) 洗練された方法で追跡するにはどうすればよいでしょうか? また、コードの残りの部分で純粋性に与える影響を最小限に抑えるにはどうすればよいでしょうか?

状態モナドのようなものは、ここでは役に立たないと思います

4

2 に答える 2

5

最も実用的な方法は、副作用があるという事実を漏らさずに、不純なアクションをカプセル化するために保持しなければならない不変条件を決定し、そうであるという証拠が得られたら、「unsafePerformIO」内に状態を隠すことです。

別の方法は、内部状態が存在するという事実を公開することです。たとえば、明示的な「i have been initialized」トークンによって偽造も分割も不可能であり、基礎となるリソースへの線形アクセスを保証します。

于 2010-09-05T17:11:18.117 に答える
3

関数型リアクティブプログラミングは活発な研究分野ですが、因果関係をモデル化する必要がない場合は、ここでリーダーモナドを使用できる場合があります。

于 2010-09-05T17:08:09.890 に答える