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?

Était-ce utile?

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.

scroll top