Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

[REBOL] Re: Competition - There must be a better way to .....

From: ale870::gmail::com at: 24-Nov-2007 15:55

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 <pwawood-gmail.com> 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