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é?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top