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

World: r3wp

[Core] Discuss core issues

Edgar
29-Apr-2006
[4214]
Linux uses ttySx and Cygwin uses comx.
eFishAnt
29-Apr-2006
[4215x2]
now the whole controller can be done in REBOL.
Are you from Italy?
Edgar
29-Apr-2006
[4217]
No, I am from LA.
eFishAnt
29-Apr-2006
[4218]
you city's name can be juggled to "Legs On Sale"
Edgar
29-Apr-2006
[4219x2]
I was experimenting with CoLinux. Got tired of DualBoot.
Actually my City is Norwalk but LA is more known.
eFishAnt
29-Apr-2006
[4221]
well, thank you very much...this is very exciting.  I had tried ttys0 
but never thought to try ttyS0, since in /dev it is ttys0
Robert
30-Apr-2006
[4222x10]
Hi, I need some help with BIND (I think that's what I need to use): 
I have a storage context, that has a bunch of function to handle 
the storage of other contexts. That those storage functions can work, 
they need to have access to the other context. I could do:
storage/save-record context-to-save ...
but I would like to do: context-to-save/save-record.
and avoid dubplicating the storage code in every context, or write 
stub-functions that reference the storage stuff.
Is it possible to bind the storage functions dynamically to the context 
that should be saved and switch this binding in the app depending 
on which context should be stored?
In other languages this is called delegates (IIRC).
Example:
context A [a: 1 b: 2 c:3 list-words: none]
context storage [list-words: does [probe first self]]
How can I execute storage/list-words in the context of A? So that 
I get back [a b c list-words]
I think I need to switch the way it works:
	do bind [first object] storage
Is this the correct way?
no it isn't...
Anton
30-Apr-2006
[4232x2]
>> c1: context [a: b: none]
>> c2: context [a: b: none]
>> do bind [a: 1 b: 2] c1
== 2
>> probe c1
make object! [
    a: 1
    b: 2
]
>> do bind [a: 100 b: 200] c2
== 200
>> probe c2
make object! [
    a: 100
    b: 200
]
Oh sorry, you specifically want to bind a function's body to the 
context.
Let's see, I think this will work:
	bind second get in storage 'list-words A
	storage/list-words
Robert
30-Apr-2006
[4234]
What's this SECOND about?
Anton
30-Apr-2006
[4235x3]
Just getting the function body.
>> A: context [a: 1 b: 2 c: 3]
>> storage: context [list-words: does [probe first self]]
>> storage/list-words
[self list-words]
== [self list-words]
>> bind second get in storage 'list-words A
== [probe first self]
>> storage/list-words
[self a b c]
== [self a b c]
read as: "bind the body of list-words to A"
Robert
30-Apr-2006
[4238]
Ok... now I think I got it. I was always trying to bind the WHOLE 
function, not only the body...
Anton
30-Apr-2006
[4239x4]
Yes, bind needs a block! value, not a function!
A function! is a more complex value, which contains a spec and a 
body.
You wouldn't want to bind the whole function, which would probably 
imply binding its spec block as well, since that would unlink the 
argument spec block relative to the body block.
Although, now that I think about it, that *could* be useful in some 
circumstance, maybe.... Many functions with similar argument lists 
could share a context.
Robert
30-Apr-2006
[4243]
ok. Thanks a lot.
Anton
30-Apr-2006
[4244]
no problem..
Robert
30-Apr-2006
[4245x3]
I think I can bind a bunch of functions as well, right?
I mean in one step.
So for example I specify a block of function names, that I want to 
bind.
Anton
30-Apr-2006
[4248]
You could append each function's body block to a single, large block. 
Then bind that.
Robert
30-Apr-2006
[4249]
And it will keep it's link to the original function spec?
Anton
30-Apr-2006
[4250x2]
blk: [] foreach func funcs [append blk second :func]  bind blk ctx-A
Yes, remember it's possible for same-named but differently-bound 
words to coexist together in a block.
Robert
30-Apr-2006
[4252]
Yes, but second FUNC doesn't return the function word. So where is 
this link kept? Or is the reference to the func body bound?
Anton
30-Apr-2006
[4253x3]
example:
>> blk: reduce [in system 'options in face 'options]
== [options options]
>> type? get blk/1
== object!
>> type? get blk/2
== none!
Are you talking about the words you have set to function values ? 
eg:   my-word: func [][]
Each word has a single value slot (per context).
Robert
30-Apr-2006
[4256]
If I'm binding SECOND FUNC the body's reference is used, so this 
particular block is bound. Not a copy.
Anton
30-Apr-2006
[4257]
Correct.
Robert
30-Apr-2006
[4258x2]
Ok.
The 'blk part doesn't work. I get an error for SECOND
Anton
30-Apr-2006
[4260x4]
Did you put function! values into the funcs input block ?
eg:
>> my-func: func [arg][print arg]
>> funcs: reduce [:my-func]
>> type? first funcs
== function!
Hmm... it's not working....
It doesn't look as simple operation as I thought...