Alessandro I think the problem that you've solved is slightly different to mine. I need to add words to the context after it has been created as I don't know what variables will be supplied until the script is running.
Regards Peter On Saturday, November 24, 2007, at 10:55 pm, Alessandro Manotti wrote: > I had the same problem (similar problem) when I created Framework > "Laccio". > I solved simply creating a variabile in the external container: > > internal-variable: none > > ctx1: context [ > internal-variable: "A" > ] > > I used this "trick" to create several instances of the same Layout > (View > Layout). See the following real example: > > ctx1: context [ > myButton: none > > myLayout: [ > myButton: button "Click me" > ] > ] > > view layout ctx1/myLayout > > > > If you think I'm to the right way, you can donwload my framework from > http://laccio.wordpress.com then take a look to the viewer > implementation > (not the controller). > > > > > > > On Nov 24, 2007 5:13 AM, Peter Wood <[EMAIL PROTECTED]> wrote: > >> >> Seeing the great response to previous competitions, I thought that I'd >> start one too. >> >> As part of a test framework I'm working on, I want to evaluate the >> test >> code in a separate context to avoid clashes between the code being >> tested and the test framework code. >> >> I found it wasn't as easy as simply binding the block to a different >> context. I've come up with a method based on adding new words in the >> code to be evaluated to the context before binding them. It seems to >> work (I haven't tested it extensively yet) but it's complicated and >> uses recursion. >> >> I'm sure many of you can come up with simpler and non-recursive >> solutions? >> >> My code: >> >> eval-ctx: make object! [ >> anchor: none >> eval: function [code-block [block!]] [ >> result >> ][ >> bind code-block 'anchor >> if error? set/any 'result try code-block [ >> result: disarm result >> ] >> result >> ] >> ] >> >> >> evaluate: function [code-block [block!]] [ >> words-to-add >> find-words-to-add >> p >> w >> ][ >> words-to-add: copy [] >> find-words-to-add: func [code-block [block!]][ >> parse code-block [ >> any [ >> set w block! ( >> find-words-to-add w ;; recursive call >> ) >> | >> set w set-word! ( >> if not in eval-ctx to word! w [ >> insert insert words-to-add reduce w none >> ] >> ) >> | >> 'set set w lit-word! ( >> if not in eval-ctx w [ >> insert insert words-to-add to set-word! w none >> ] >> ) >> | >> set p path! set w lit-word! ( >> if 'set = first p [ >> if not in eval-ctx w [ >> insert insert words-to-add to set-word! w none >> ] >> ] >> ) >> | >> skip >> ] >> ] >> ] >> find-words-to-add code-block >> if words-to-add <> [] [ >> eval-ctx: make eval-ctx words-to-add >> ] >> eval-ctx/eval code-block >> ] >> >> A sample: >> >>>> evaluate [test1: "peter"] >> [test1: "peter"] >> == "peter" >>>> test1 >> ** Script Error: test1 has no value >> ** Near: test1 >>>> probe eval-ctx >> make object! [ >> anchor: none >> eval: func [code-block [block!] /local >> result >> ][ >> bind code-block 'anchor >> if error? set/any 'result try code-block [ >> result: disarm result >> ] >> result >> ] >> test1: "peter" >> ] >> >> Regards >> >> Peter >> >> -- >> To unsubscribe from the list, just send an email to >> lists at rebol.com with unsubscribe as the subject. >> >> > > > -- > > //Alessandro > > http://sguish.wordpress.com > http://laccio.wordpress.com > > > -- > To unsubscribe from the list, just send an email to > lists at rebol.com with unsubscribe as the subject. > -- To unsubscribe from the list, just send an email to lists at rebol.com with unsubscribe as the subject.
