2013-07-18 8 views
5

Consente di dire che definisco poche parole:REBOL 3 - Dove è possibile accedere alle parole dello spazio dei nomi definite dall'utente?

Word1: 5 
Word2: "blahdiddyblah" 

c'è qualche parte o il blocco del sistema che memorizza le parole che sono in uso?

provato qualcosa di simile, ma non è riuscito:

S1: to-block copy system/contexts/user 

D: 3 

S2: to-block copy system/contexts/user 

Difference s1 s2 

Secondo @johnk suggerimento, ho provato:

>> snapshot-of-words: words-of system/contexts/user 
== [system snapshot-of-words words-of contexts user] 

>> x: 1 
== 1 

>> difference snapshot-of-words words-of system/contexts/user 
== [x difference] 

>> difference snapshot-of-words words-of system/contexts/user 
== [x difference] 

>> 5 + 9 
== 14 

>> form ["hellow" "there" ] 
== "hellow there" 

>> difference snapshot-of-words words-of system/contexts/user 
== [x difference + form] 

Cosa significa? le funzioni native sono legate al contesto dell'utente dopo l'uso? C'è un modo per isolare questi da quelli che un utente potrebbe legare?

+0

qualsiasi built-in parole usate di essere vincolati nel contesto utente sia in script o console – kealist

+0

coinvolge CARICO-GUI è molto più complicata perché lega così tante parole diverse – kealist

+0

controllo prima o dopo load-gui non è utile per quello che sto cercando di fare – kealist

risposta

5

Quando si usano le parole in uno script, ogni riga di comando che si immette in modo interattivo è uno script diverso: quelle parole vengono aggiunte a system/contexts/user, il contesto dell'utente. Semplicemente avere le parole nello script le aggiunge al contesto dell'utente, questo è tutto l '"uso" necessario. Se una di queste nuove parole esiste già in lib, la libreria di runtime, le parole di contesto dell'utente ricevono i loro valori iniziali assegnati dai valori che tali parole hanno nella libreria di runtime in quel momento.

Nel codice di esempio, quando si utilizza la parola form nel proprio script, questo viene aggiunto al contesto dell'utente. Quindi a form viene assegnato il valore che è stato assegnato a lib/form alla volta. Da questo momento in poi, form è una parola utente: la parola di sistema è lib/form.

L'unica volta che i valori delle parole si propagano da lib al contesto dell'utente è quando tale parola viene prima aggiunta al contesto dell'utente e viene indicato il suo valore iniziale. Dopodiché, se desideri apportare modifiche alla versione lib di quella parola per trasformarla nella versione del contesto utente di quella parola, devi assegnarla tu stesso. Se hanno lo stesso valore in avanti, è solo perché non hai assegnato un nuovo valore alle parole dell'utente o di sistema.

Tutte le parole nel contesto dell'utente sono parole create dall'utente, anche quelle inizializzate da lib. L'utente ha fatto quelle parole quando le ha inserite negli script utente. Questo è l'intero punto del contesto dell'utente. Quindi, se si utilizza print nel proprio script, si tratta di una parola utente, non diversa dalle altre parole dell'utente.

Si potrebbe voler cercare qui per maggiori dettagli: How are words bound within a Rebol module? E anche qui: What is the summary of the differences in binding behaviour between Rebol 2 and 3?

+0

Apprezzo la spiegazione, molto utile. Sto cercando di farmi una sorta di debug degli IDE. RE: LOAD-GUI Potrei essere un po 'inesperto per capire l'intenzionalità/non intenzionalità di una perdita di parole nel contesto dell'utente, ma vedrò cosa riesco a capire – kealist

Problemi correlati