2013-02-14 9 views
5

Sto tentando di salvare alcuni valori stringa in un blocco in modo da poter salvare quel blocco in un file di testo. Sto ottenendo questi valori da un modulo usando VID.Salvare un valore su un blocco anziché sull'etichetta della parola che lo rappresenta

Un modo per farlo sarebbe quello di salvare semplicemente le stringhe nel file. Ma preferirei essere in grado di recuperare i dati come blocco.

Questo è ciò che intendo fare:

view layout [ 
    contact-name: field 
    save-button: btn "Save" [ 
     saved-data-block: copy [] 
     append saved-data-block [[contact-name: contact-name/text]] ;problem here 
     save my-file saved-data-block 
    ] 
] 

Per un ingresso come Rebol User nel campo del nome, il contenuto memorizzato nel file dovrebbe essere qualcosa di simile [contact-name: "Rebol User"], ma il contenuto è [contact-name: contact-name/text]

Capisco che il problema è che il blocco non viene valutato come codice nel momento in cui lo sto aggiungendo a saved-data-block. Cosa posso fare per salvare il valore della stringa nel file di testo in modo simile a un blocco? Dovrei fare qualcos'altro per raggiungere questo obiettivo? Eventuali commenti/domande sono ben accetti.

risposta

3

Se non è necessario utilizzare per ridurre i specifico, comporre può essere un modo migliore di chiamare le parti che si desidera essere "lasciato solo". Verranno valutate solo le cose tra parentesi, il resto non verrà toccato. Così, per esempio:

append/only saved-data-block compose [contact-name: (get-face contact-name)] 

Compose è spesso il modo più chiaro per esprimere boilerplate con piccole parti hanno notato che si desidera valutare. Certo, è bene capire anche ridurre.

1

Riduci anche il nome del campo che è anche "nome-contatto".

Quindi, questo sarebbe meglio

append/only saved-data-block reduce [ to-set-word contact-name get-face contact-name ] 
3

Graham rispondere, in realtà non trova una zecca :-)

append/only saved-data-block reduce [ to-set-word 'contact-name get-face contact-name ] 

Senza il 'ridurre riduce contatto nome al suo valore, un oggetto! prima che sia consegnato a set-word.

Quindi, è necessario modificare il nome del contatto in una parola illuminata! 'Nome del contatto .

riduce lo riduce a una parola !, che verrà quindi passato a set-word.

3

Ed ecco un'altra idea:

append/only saved-data-block repend [contact-name:] get-face contact-name 

Questo contatto nome tempo: non si riduce, in modo che rimanga un set-word !, e il valore dall'elemento modulo viene aggiunto.

Non sembra bello con la doppia append, ma consente di risparmiare sui tasti.