Strano Rebol ERRORE: L'errore ha bisogno di un valore
-
13-09-2019 - |
Domanda
Quando si esegue
do-file: func[file][
if error? error: try [
if (find [%.r %.cgi] (suffix? file)) [
do file
]
][
disarm error
print ["error executing " file]
input
]
]
foreach-file: func [
"Perform function on each file in selected directory recursively"
dir [file! url!] "Directory to look in"
act [function!] "Function to perform (filename is unput to function)"
/directory "Perform function also on directories"
/local f files
][
if not equal? last dir #"/" [
dir: to-rebol-file join dir #"/"
]
files: attempt [read dir]
either none? files [return][
foreach file files [
f: join dir file
either dir? f [
either directory [
act f
foreach-file/directory f :act
][
foreach-file f :act
]
][act f]
]
]
]
feach-file %test/ :do-file
dove% di prova dovrebbe contenere un file con un solo colpo di testa Rebo:
rebol []
Il programma si arresta con un errore, invece di disarmare l'errore!
Non dà un errore se il file contiene qualcosa come
rebol []
test: context []
, ma sarebbe fallire di nuovo se contiene
rebol []
print ""
Perché?
Soluzione
Una parola insieme deve essere alimentato con un valore come illustrato da questa sessione di console:
A: func [] [! # [Unset]] B: un ** Errore di script: b ha bisogno di un valore ** Vicino: B: a
La soluzione è quella di utilizzare insieme / qualunque, invece di una parola insieme.
? impostato USO: parola valore SET / qualsiasi / pad
Descrizione: Imposta una parola, blocco di parole o oggetto valore specificato (s). SET è un valore originario.
ARGOMENTI: parola - parola o le parole per impostare (Tipo: qualsiasi parola blocco oggetto) value - valore o il blocco dei valori (tipo: qualsiasi tipo)
'Cerca / Qualsiasi - consente di impostare parole su qualsiasi valore. / Pad - Per gli oggetti, se il blocco è troppo breve, le parole rimanenti sono impostati su NONE
.È possibile usare qualcosa come:
se l'errore? insieme / qualunque 'errore di provare [] [disarmare errore] == none
Tra l'altro, è possibile trovare le risposte a molte delle vostre domande attraverso la Rebol Mailing List Archive all'indirizzo http://www.rebol.org/ml-index.r .
Altri suggerimenti
do-file: func [ file
/local err
][
if error? set/any 'err try [
if find [%.r %.cgi] suffix? file [
do file
]
][
print ["error executing " file]
print mold disarm err
]
]
Queste parentesi non erano necessarie.
Ecco uno stile alternativo
do-file: func [file] [
/local err
] [
if error? set/any 'err try [
all [
find [%.r %.cgi] suffix? file
do file
]
] [
print ["error executing " file]
print mold disarm err
]
]
Non c'è un valore valido restituito quando il successo fare un file. mentre set-parola ha bisogno di un rapporto qualità prezzo, / qualunque possono accettare qualsiasi valore.