我想编写一个游戏,并想为多个实体使用组件模式。
在具有接口/类型类/多重继承的语言中不会有问题。
我希望某些实体是可更新的但不可渲染的,而有些则两者兼而有之。
哈斯克尔:
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 中实现这一点。
拟合多方法的存在可以用类型表示吗?
var objs: seq[???] = @[]
编辑:添加了更多代码并修复了不正确的 Haskell 示例