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

Global function defined in context

 [1/4] from: reboler::ifrance::com at: 26-Dec-2002 19:50


Hi, List Until recently I thought that the two following constructions were equivalent. 1. myWorld: context [ set 'helloWorld func [][print "Hello World"] ] 2. myWorld2: context [ helloWorld2: func [][print "Hello second World"] ] In fact, it is not. From (1.) we get a global function, from (2.) a local function.
>> helloWorld2
** Script Error: helloWorld2 has no value ** Where: do-boot ** Near: helloWorld2
>> myWorld2/helloWorld2
Hello second World Does 'set always create global function? if so, wouldn't it be better if documented in "HELP SET"? Patrick _____________________________________________________________________ GRAND JEU SMS : Pour gagner un NOKIA 7650, envoyez le mot IF au 61321 (prix d'un SMS + 0.35 euro). Un SMS vous dira si vous avez gagné. Règlement : http://www.ifrance.com/_reloc/sign.sms

 [2/4] from: al:bri:xtra at: 27-Dec-2002 8:35


Patrick wrote:
> 1. > myWorld: context [
<<quoted lines omitted: 4>>
> helloWorld2: func [][print "Hello second World"] > ]
3. myWorld3: context [ helloWorld: none set 'helloWorld func [][print "Hello World"] ]
>> probe myWorld3
make object! [ helloWorld: func [][print "Hello World"] ]
> Does 'set always create global function?
No. Evaluation of 'func creates a function! value. 'set takes the second value and assigns that value as the value of the first value (a word! value). Rebol looks for a matching word in the "closest" enclosing context. If none is found, Rebol creates a word in the global context. Andrew Martin ICQ: 26227169 http://valley.150m.com/

 [3/4] from: nitsch-lists:netcologne at: 26-Dec-2002 23:43


pat665 wrote:
>Hi, List >Until recently I thought that the two following constructions were equivalent.
<<quoted lines omitted: 17>>
>Does 'set always create global function? >if so, wouldn't it be better if documented in "HELP SET"?
No, set-words allways create local-functions. because 'context looks for them. 'set is a trick for export, 'context sees no set-word, 'context ignores it. a: context[ a-func: none b: context[ set 'a-func func[]['a] b-func: func[]['b] ] ] ? a make object! [ a-func: func []['a] b: make object! [ b-func: func []['b] ] ]

 [4/4] from: reboler:ifrance at: 27-Dec-2002 14:57


Hi Andrew, Thanks for the explanations. If I understand you (and Volker) well the 'set construction is merely a trick to define a not-in-context function. From recent Carl S. posts, he seems to use it a lot. Patrick

Notes
  • Quoted lines have been omitted from some messages.
    View the message alone to see the lines that have been omitted