r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[Core] Discuss core issues

Fork
1-Apr-2008
[9853]
Ah, an lfunc, that sounds nice
Anton
1-Apr-2008
[9854x3]
do [
	use [v][v: 1 + 2]
]
context [
	v: 1 + 2
	print v
]
same as
make object! [
	v: 1 + 2
	print v
]
Fork
1-Apr-2008
[9857]
I see... context looks like a good thing, great!
Anton
1-Apr-2008
[9858x2]
Yes, very useful.
?? context
Fork
1-Apr-2008
[9860]
When I do something like a for loop and I specify a name for the 
loop variable, is that defined globally by default or locally?
Anton
1-Apr-2008
[9861x4]
which reminds me; make-enum-type can be optimized like so:

make-enum-type: func [ possibilities [block!] ] [
	make enum! [
		p: to-hash possibilities
		l: length? possibilities
	]
]
so no need for a local at all.
Loop functions set words local, in a temporary context. You can test 
whether loop functions set words global or not quite easily:
>> for i 1 10 1 []
>> i
** Script Error: i has no value
** Near: iĀ
Fork
1-Apr-2008
[9865]
Yes, thanks for reminding me of the at-hand-interpret-as-you-type 
thing :)
Anton
1-Apr-2008
[9866]
All I can say is, enjoy...
Fork
1-Apr-2008
[9867]
Is there a way to get the native-switch that is better than how I've 
done it?
Anton
1-Apr-2008
[9868x3]
(But I was thinking, the above doesn't prove that  i  is not set 
global during the loop, then unset at the end, but you wouldn't expect 
that sort of sneaky behaviour...:)
Yes, you've set 'native-switch global. It appears to be used only 
in the enum/switch function.
You could simply refer to system/words/switch instead. No extra variable 
necessary here.
Fork
1-Apr-2008
[9871x2]
A-ha... nice.  Now here's something... can I make it so that my test-block 
runs the code in its body in a local context?
I guess, use [][do :block] ?
Anton
1-Apr-2008
[9873x4]
No, that use would be no different than just
	do :block
Because, by not specifying any use locals, you are making a context 
without any local words in it.
(ah... except 'self, but that's not important here)
Better than
	loop times [do :block]
is
	loop times block
Fork
1-Apr-2008
[9877x2]
Now that one I got from a sample on the web.  :)  http://www.rebol.org/cgi-bin/cgiwrap/rebol/view-script.r?script=timeblk.r
Which also didn't declare start: locally...
Anton
1-Apr-2008
[9879]
The words in block maintain their bindings. This is what you want; 
the words retain the meanings from the context the user wrote them 
in. (ie. your locals do not affect those words because nowhere do 
you bind the words to any of your own contexts.)
Fork
1-Apr-2008
[9880]
do context[do :block] ... that would give it a new context and run 
it there.  What kind of thing would that break?
Anton
1-Apr-2008
[9881]
So if I write
	test-block "section" [ print reps ]


then REPS means what *I* (the user of the test-block function) thinks 
it means, not what test-block thinks in its little context.
Fork
1-Apr-2008
[9882]
Hmmm.  Ok, so if I want to have local variables in a test-block the 
context declaration would need to live there?  That is different?
Anton
1-Apr-2008
[9883]
(First DO does nothing extra, just returns the object)
Again, 
	context [do :block]
is no more (except 'self) than:
	do :block
Fork
1-Apr-2008
[9884]
I did try that but it didn't seem to evaluate the block
Anton
1-Apr-2008
[9885]
You could do something like this:
	use [var1 var2] block
or
	context join [var1: 100 var2: 200] block
Fork
1-Apr-2008
[9886]
Now it's evaluating, hm.  Wonder what I did before.
Anton
1-Apr-2008
[9887]
There're lots of confusions here when starting out :) beware !
Fork
1-Apr-2008
[9888]
Yes!
Anton
1-Apr-2008
[9889]
But I'm wondering why you want to subvert the meaning of the words 
in the block to your local meanings.
Fork
1-Apr-2008
[9890]
Well, I have one test block after another in a line
Anton
1-Apr-2008
[9891]
Surely you want the block to retain all its meanings ?
Fork
1-Apr-2008
[9892x2]
I'm used to C++, so I like scopes.  They make me happy :)
So I was wondering if I could let the concept of each test-block 
being a scope come from test-block itself
Anton
1-Apr-2008
[9894]
Rebol's contexts are better ! (But scope is good for compiling.)
Fork
1-Apr-2008
[9895x4]
Because if one test block goes:
var: 15
I don't want the next test-block to be entered with var set to 15
I want it set to none initially
Anton
1-Apr-2008
[9899]
Oh ok, so letting set-words be locals automatically.
	context block
Fork
1-Apr-2008
[9900x2]
Does context affect anything besides set-words ?
e.g. will everything else bind the same as you would have otherwise 
expected?
Anton
1-Apr-2008
[9902]
No, and the set-words are searched only in the block specified (not 
"sub-blocks").