ゲームをプログラミングしたいと思います。複数のエンティティにコンポーネントパターンを使用したいと思います。Nim - メソッドを実装するオブジェクトのシーケンスを作成します。
interfaces/type-classes/multiple inheritanceの言語では問題ありません。
いくつかのエンティティは更新可能ですがレンダリング可能ではないものが必要ですが、いくつかは両方とも必要です。
ハスケル:
class Updateable a where
update :: Float -> a -> a
class Renderable a where
render :: a -> Picture
class InputHandler a where
handleInput :: Event -> a -> a
私は更新することが可能なもののリストを作成することができます。 Javaでは
updateAll :: Updateable a => Float -> [a] -> [a]
updateAll delta objs = map (update delta) objs
/D/...これは今、私はこれがマルチメソッドとNIMで実現することができるか疑問に思ってインタフェース
interface Updateable {
void update(float delta);
}
// somewhere in a method
List<Updateable> objs = ...;
for (Updateable o : objs) {
o.update(delta);
}
を経由して実施することができます。
フィッティングマルチメソッドの存在をタイプで表現できますか?
var objs: seq[???] = @[]
編集:より多くのコードと固定間違ったHaskellの例明示的な
interface
キーワードの欠如が
common question in the Nim communityある
[コンセプト](http://nim-lang.org/docs/manual.html#generics-concepts)のように思えますが、まだWIPであり、私は 'seq [Updatable] '。 'updateable = concept x update(x)' – Karroffel
あなたの例では、複数の継承をどの程度正確に使いたいかは不明です。たとえば、コンポーネントがrender()やupdate()を実装していない場合は、何もしないでください。一般的なエンジンのコンポーネントベースのアーキテクチャ(Unity3d、UE4)を見ると、ユーザが実装するコアクラス用のインタフェースは使用されません。実装する必要がある多くのインタフェースよりも単一の「コンポーネント」型について考える方が簡単です。 – endragor