Skip to content

Instantly share code, notes, and snippets.

@Araq
Created May 3, 2017 09:13
Show Gist options
  • Select an option

  • Save Araq/0870ad0d61f005dbedbbd2c8c17b40ad to your computer and use it in GitHub Desktop.

Select an option

Save Araq/0870ad0d61f005dbedbbd2c8c17b40ad to your computer and use it in GitHub Desktop.
type
CanMove = concept x
x.move(0.0)
ICanMove = ref object
move: proc(tick: float)
Mover = ref object
movees: seq[ICanMove]
Person = ref object
Animal = ref object
proc ToICanMove[T:CanMove](canMove: T): ICanMove =
ICanMove(move: proc(tick: float)=
canMove.move(tick))
proc move(p: Person, tick: float) =
echo "People can move, tick: " & $tick
template move(a: Animal, tick: float) =
echo "Animals can move, tick: " & $tick
proc move(m: Mover, tick: float) =
for movee in m.movees:
movee.move(tick)
let
p = new Person
a = new Animal
m = Mover(movees: @[])
m.movees.add ToICanMove(p)
m.movees.add ToICanMove(a)
m.move(0.3)
m.move(0.2)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment