我想編程一個遊戲,並且想爲多個實體使用組件模式。Nim - 創建實現方法的對象序列
在接口/類型/多繼承的語言中,沒有問題。
我想要一些實體可更新但不可呈現,有些應該是兩者。
哈斯克爾:
class Updateable a where
update :: Float -> a -> a
class Renderable a where
render :: a -> Picture
class InputHandler a where
handleInput :: Event -> a -> a
我可以創造的東西,可以更新列表。
updateAll :: Updateable a => Float -> [a] -> [a]
updateAll delta objs = map (update delta) objs
在Java/d/...這可以通過接口
interface Updateable {
void update(float delta);
}
// somewhere in a method
List<Updateable> objs = ...;
for (Updateable o : objs) {
o.update(delta);
}
現在我想知道如何能在NIM實現與多方法來實現。
擬合multimethod的存在是否可以用類型表示?
var objs: seq[???] = @[]
編輯:添加更多的代碼和固定不正確的Haskell例如
好像[概念](http://nim-lang.org/docs/manual.html#generics-concepts)是的路要走,但他們仍然在製品和我不能創建一個'序列[可更新] '。 '類型可更新=概念x更新(x)' – Karroffel
在你的例子中,你不清楚你要如何使用多繼承。例如,爲什麼不簡單地不做任何事情,如果一個組件不「實現」render()或update()?查看受歡迎的引擎的基於組件的體系結構(Unity3d,UE4),他們不會使用用戶實現的核心類的接口 - 考慮單個「組件」類型比可能需要實現的許多接口更容易。 – endragor