[REBOL] Re: the utility of 'bind
From: krobillard:cox at: 21-Jan-2004 20:30
You can use bind to execute functions in a protected context.
I have done this in a compiler for a game scripting language. I could have
implemented the compiler with parse, but then I could not make use of Rebol
constructs within my custom game dialect. By making the game commands normal
functions the capabilities of Rebol can be leveraged to expand macros and
templates, evaluate mathematical expressions, do conditional compilation,
etc.
In order not to pollute the global namespace, these game commands are placed
within a context, and to compile a block of code in that context requires
bind.
REBOL []
game-script-compiler: context [
commands: context [
; These emit bytecode.
run: func [speed] [print ["emit run" speed "here"] ]
jump: func [height] [print ["emit jump" height "here"] ]
laugh: does [print "emit laugh here"]
]
set 'compile func [code] [
do bind code in commands 'run
]
]
compile [
run 1.4
jump 2.0
laugh
run 1.4 * 0.8 ; Rebol will evaluate this for us as normal.
]
-Karl
On Wednesday 21 January 2004 09:41 am, Andreas Bolka wrote: