Я хочу запрограммировать игру и хотел бы использовать шаблон компонента для нескольких объектов.Nim - создать последовательность объектов, которые реализуют метод
На языке с интерфейсами/типами/множественным наследованием проблем не было.
Я хочу, чтобы некоторые объекты были обновляемыми, но не отображаемыми, а некоторые должны быть обоими.
Haskell:
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[???] = @[]
Edit: Добавлен дополнительный код и фиксированный неправильный пример Haskell
Похоже, [концепции] (http://nim-lang.org/docs/manual.html#generics-concepts) - это путь, но они все еще являются WIP, и я не могу создать 'seq [Updatable] '. 'type Updateable = concept x update (x)' – Karroffel
Непонятно, как именно вы хотели бы использовать множественное наследование в своем примере. Например, почему бы просто не делать ничего, если компонент не «реализует» render() или update()? Рассматривая архитектуру на основе компонентов популярных процессоров (Unity3d, UE4), они не используют интерфейсы для основных классов, которые реализуют пользователи, - проще думать об одном типе «Компонент», чем о многих интерфейсах, которые могут потребоваться реализовать. – endragor