Étrange bug rebol: erreur a besoin d'une valeur
-
13-09-2019 - |
Question
Lors de l'exécution
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
test où% contiendrait un fichier avec en-tête juste de Rebo:
rebol []
Le programme arrête avec une erreur au lieu de désarmer l'erreur!
Il ne donne pas une erreur si le fichier contient quelque chose comme
rebol []
test: context []
mais il échouait à nouveau si elle contient
rebol []
print ""
Pourquoi?
La solution
Un mot de jeu doit être fourni avec une valeur comme illustré par cette session de la console:
: func [] [! # [Unset]] b: a ** Erreur de script: b a besoin d'une valeur ** Près de: b: a
La solution consiste à utiliser dans / tout lieu d'un mot de consigne.
? ensemble USAGE: SET valeur mot / any / pad
DESCRIPTION: Définit un mot, un bloc de mots, ou de l'objet à la valeur spécifiée (s). SET est une valeur native.
ARGUMENTS: mot - ou plusieurs mots pour définir (Type: objet bloc tout mot) La valeur - Valeur ou bloc de valeurs (Type: tout type)
Affiner votre recherche: / Tout - Permet de définir des mots à toute valeur. / Pad - Pour les objets, si le bloc est trop court, les mots restants sont mis à NONE
.Vous pouvez utiliser quelque chose comme:
en cas d'erreur? jeu / une « erreur essayer [] [désarmer erreur] == aucun
Par ailleurs, vous pouvez trouver les réponses à plusieurs de vos questions à travers la liste de diffusion Rebol Archive
Autres conseils
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
]
]
Les parenthèses ne sont pas nécessaires.
Voici un autre style
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
]
]
Il n'y a pas une valeur valide retournée lorsque le succès ne fichier. tout ensemble mots ont besoin d'une valeur, définir / tout peut accepter toute valeur.