# BASE
type Command = ref object of RootObj
method execute*(c: Command) = discard #{.base.}
# Greet
type CommandGreet = ref object of Command
method execute(c: CommandGreet) = echo "hi!"
# Exit
type CommandExit = ref object of Command
method execute(c: CommandExit) = quit "Bye Bye"
# Triggers
type Trigger = enum
tKEY_W
tMOUSE
# Table
let bindings: array[Trigger, Command] = [
tKEY_W: CommandGreet(),
tMOUSE: CommandExit(),
]
########
for t in {tKEY_W, tMOUSE}:
let command = bindings[t]
execute command
IyBCQVNFCnR5cGUgQ29tbWFuZCA9IHJlZiBvYmplY3Qgb2YgUm9vdE9iagptZXRob2QgZXhlY3V0ZSooYzogQ29tbWFuZCkgPSBkaXNjYXJkICN7LmJhc2UufQojIEdyZWV0CnR5cGUgQ29tbWFuZEdyZWV0ID0gcmVmIG9iamVjdCBvZiBDb21tYW5kCm1ldGhvZCBleGVjdXRlKGM6IENvbW1hbmRHcmVldCkgPSBlY2hvICJoaSEiCiMgRXhpdAp0eXBlIENvbW1hbmRFeGl0ID0gcmVmIG9iamVjdCBvZiBDb21tYW5kCm1ldGhvZCBleGVjdXRlKGM6IENvbW1hbmRFeGl0KSA9IHF1aXQgIkJ5ZSBCeWUiCiMgVHJpZ2dlcnMKdHlwZSBUcmlnZ2VyID0gZW51bQogIHRLRVlfVwogIHRNT1VTRQojIFRhYmxlCmxldCBiaW5kaW5nczogYXJyYXlbVHJpZ2dlciwgQ29tbWFuZF0gPSBbCiAgdEtFWV9XOiAgQ29tbWFuZEdyZWV0KCksCiAgdE1PVVNFOiAgQ29tbWFuZEV4aXQoKSwKXQojIyMjIyMjIwpmb3IgdCBpbiB7dEtFWV9XLCB0TU9VU0V9OgogIGxldCBjb21tYW5kID0gYmluZGluZ3NbdF0KICBleGVjdXRlIGNvbW1hbmQK